Commit Graph

1020 Commits

Author SHA1 Message Date
Nguyen Khac Trung Kien d2a5f47f1c Merge pull request #677 from jkoelker/fix/add-variant-support 2026-01-13 12:48:57 +07:00
Jason Kölker 2b8853cbac feat(config): add model variant support
Allow optional model variant config for agents and categories.
Propagate category variants into task model payloads so
category-driven runs inherit provider-specific variants.

Closes: #647
2026-01-13 04:37:51 +00:00
Kenny f9fce50144 Merge pull request #728 from code-yeongyu/fix/sisyphus-orchestrator-test-assertion
fix(test): update sisyphus-orchestrator test assertion
2026-01-12 23:06:36 -05:00
Kenny d1ffecd887 fix(test): update sisyphus-orchestrator test to expect preserved subagent response
The implementation preserves original subagent responses for debugging failed tasks.
Updated test assertion from .not.toContain() to .toContain() to match this behavior.
2026-01-12 23:04:34 -05:00
Kenny d9aabb33fd Merge pull request #709 from Momentum96/fix/skill-lazy-loading
fix(skill-loader): implement eager loading for skills
2026-01-12 22:50:31 -05:00
Kenny 79bd75b3db refactor(skill-loader): eager loading with atomic file reads
- Extract body during initial parseFrontmatter call
- Rename lazyContent → eagerLoader with rationale comment
- Eliminates redundant file read and race condition
2026-01-12 22:46:28 -05:00
Kenny 14dc8ee8df Merge pull request #698 from chilipvlmer/fix/preserve-subagent-response
fix(sisyphus-orchestrator): preserve subagent response in output transformation
2026-01-12 22:16:59 -05:00
Kenny 6ea63706db Merge pull request #726 from code-yeongyu/fix/todowrite-agent-friendly-errors
fix(hooks): throw agent-friendly errors when todowrite receives invalid input
2026-01-12 22:11:28 -05:00
Kenny 864656475a fix: only append ellipsis when string exceeds 100 chars 2026-01-12 22:05:21 -05:00
YeonGyu-Kim 9048b616e3 Merge pull request #727 from code-yeongyu/feat/disable-call-omo-agent-default
feat(tools): disable call_omo_agent by default, enable via sisyphus_task
2026-01-13 11:26:27 +09:00
YeonGyu-Kim 4fe4fb1adf feat(tools): disable call_omo_agent by default, enable via sisyphus_task 2026-01-13 11:21:01 +09:00
Kenny 04ae3642d9 fix(hooks): throw agent-friendly errors when todowrite receives invalid input 2026-01-12 21:19:05 -05:00
Victor Sumner 70d604e0e4 fix(sisyphus-junior): use categoryConfig.model instead of hardcoded sonnet-4.5 (#718) 2026-01-13 09:58:05 +09:00
Nguyen Khac Trung Kien 8d65748ad3 fix(prometheus): prevent agent fallback to build in background tasks (#695) 2026-01-13 09:39:25 +09:00
Kenny 2314a0d371 fix(glob): default hidden=true and follow=true to align with OpenCode (#720)
- Add follow?: boolean option to GlobOptions interface
- Change buildRgArgs to use !== false pattern for hidden and follow flags
- Change buildFindArgs to use === false pattern, add -L for symlinks
- Change buildPowerShellCommand to use !== false pattern for hidden
- Remove -FollowSymlink from PowerShell (unsupported in PS 5.1)
- Export build functions for testing
- Add comprehensive BDD-style tests (18 tests, 21 assertions)

Note: Symlink following via -FollowSymlink is not supported in Windows
PowerShell 5.1. OpenCode auto-downloads ripgrep which handles symlinks
via --follow flag. PowerShell fallback is a safety net that rarely triggers.

Fixes #631
2026-01-13 09:24:07 +09:00
github-actions[bot] e620b546ab @dante01yoon has signed the CLA in code-yeongyu/oh-my-opencode#710 2026-01-12 12:39:03 +00:00
Ivan Marshall Widjaja 0fada4d0fc fix(config): allow Sisyphus-Junior agent customization via oh-my-opencode.json (#648)
* fix(config): allow Sisyphus-Junior agent customization via oh-my-opencode.json

Allow users to configure Sisyphus-Junior agent via agents["Sisyphus-Junior"]
in oh-my-opencode.json, removing hardcoded defaults while preserving safety
constraints.
Closes #623
Changes:
- Add "Sisyphus-Junior" to AgentOverridesSchema and OverridableAgentNameSchema
- Create createSisyphusJuniorAgentWithOverrides() helper with guardrails
- Update config-handler to use override helper instead of hardcoded values
- Fix README category wording (runtime presets, not separate agents)
Honored override fields:
- model, temperature, top_p, tools, permission, description, color, prompt_append
Safety guardrails enforced post-merge:
- mode forced to "subagent" (cannot change)
- prompt is append-only (base discipline text preserved)
- blocked tools (task, sisyphus_task, call_omo_agent) always denied
- disable: true ignores override block, uses defaults
Category interaction:
- sisyphus_task(category=...) runs use the base Sisyphus-Junior agent config
- Category model/temperature overrides take precedence at request time
- To change model for a category, set categories.<cat>.model (not agent override)
- Categories are runtime presets applied to Sisyphus-Junior, not separate agents
Tests: 15 new tests in sisyphus-junior.test.ts, 3 new schema tests

Co-Authored-By: Sisyphus <sisyphus@mengmota.com>

* test(sisyphus-junior): add guard assertion for prompt anchor text

Add validation that baseEndIndex is not -1 before using it for ordering
assertion. Previously, if "Dense > verbose." text changed in the base
prompt, indexOf would return -1 and any positive appendIndex would pass.

Co-Authored-By: Sisyphus <sisyphus@mengmota.com>

---------

Co-authored-by: Sisyphus <sisyphus@mengmota.com>
2026-01-12 17:46:47 +09:00
github-actions[bot] c79235744b @Momentum96 has signed the CLA in code-yeongyu/oh-my-opencode#709 2026-01-12 08:33:54 +00:00
Momentum96 6bbe69a72a fix(skill-loader): implement eager loading to resolve empty slash commands 2026-01-12 17:27:54 +09:00
Sanyue 5b8c6c70b2 docs: add localized Chinese translation for oh-my-opencode README (#696) 2026-01-12 17:27:23 +09:00
Ivan Marshall Widjaja 179f57fa96 fix(sisyphus_task): resolve sync mode JSON parse error (#708) 2026-01-12 17:26:32 +09:00
YeonGyu-Kim f83b22c4de fix(cli/run): properly serialize error objects to prevent [object Object] output
- Add serializeError utility to handle Error instances, plain objects, and nested message paths
- Fix handleSessionError to use serializeError instead of naive String() conversion
- Fix runner.ts catch block to use serializeError for detailed error messages
- Add session.error case to logEventVerbose for better error visibility
- Add comprehensive tests for serializeError function

Fixes error logging in sisyphus-agent workflow where errors were displayed as '[object Object]'
2026-01-12 14:49:07 +09:00
YeonGyu-Kim 965bb2dd10 chore(ci): remove pinned OpenCode version in sisyphus-agent workflow
Use default installer which installs latest version instead of
fallback to hardcoded v1.0.204.
2026-01-12 14:34:06 +09:00
Ivan Marshall Widjaja f9dca8d877 fix(config): resolve category to model for Prometheus (Planner) agent (#652)
* fix(config): resolve category to model for Prometheus (Planner) agent

When Prometheus (Planner) was configured with only a category (e.g.,
"ultrabrain") and no explicit model, the category was ignored and the
agent fell back to the hardcoded default "anthropic/claude-opus-4-5".
Add resolveModelFromCategoryWithUserOverride() helper that checks user
categories first, then DEFAULT_CATEGORIES, to resolve category names
to their corresponding models. Apply this resolution when building
the Prometheus agent configuration.

Co-Authored-By: Sisyphus <sisyphus@mengmota.com>

* fix(test): use actual implementation instead of local duplicate

Co-Authored-By: Sisyphus <sisyphus@mengmota.com>

* fix(config): apply all category properties, not just model for Prometheus (Planner)

The resolveModelFromCategoryWithUserOverride() helper only extracted
the model field from CategoryConfig, ignoring critical properties like
temperature, top_p, tools, maxTokens, thinking, reasoningEffort, and
textVerbosity. This caused categories like "ultrabrain" (temperature:
0.1) to run with incorrect default temperatures.

Refactor resolveModelFromCategoryWithUserOverride() to
resolveCategoryConfig() that returns the full CategoryConfig. Update
Prometheus (Planner) configuration to apply all category properties
(temperature, top_p, tools, etc.) when a category is specified, matching
the pattern established in Sisyphus-Junior. Explicit overrides still
take precedence during merge.

Co-Authored-By: Sisyphus <sisyphus@mengmota.com>

---------

Co-authored-by: Sisyphus <sisyphus@mengmota.com>
2026-01-12 12:04:55 +09:00
github-actions[bot] 91c490a358 @chilipvlmer has signed the CLA in code-yeongyu/oh-my-opencode#698 2026-01-11 18:24:57 +00:00
chilipvlmer aa44c54068 fix(sisyphus-orchestrator): preserve subagent response in output transformation 2026-01-11 19:18:28 +01:00
github-actions[bot] 945b090b1b @Sanyue0v0 has signed the CLA in code-yeongyu/oh-my-opencode#696 2026-01-11 17:37:22 +00:00
Gladdonilli 05cd133e2a fix(git-master): inject user config into skill prompt (#656) 2026-01-11 19:02:36 +09:00
yimingll 8ed3f7e03b fix: LSP tools Windows compatibility - use pathToFileURL for proper URI generation (#689) 2026-01-11 19:01:54 +09:00
github-actions[bot] 42e5b5bf44 @yimingll has signed the CLA in code-yeongyu/oh-my-opencode#689 2026-01-11 10:01:05 +00:00
sisyphus-dev-ai 8320c7cf2d fix(cli): integrate channel-based updates in doctor and get-local-version
Update CLI commands to use channel-aware version fetching:
- doctor check now reports channel in error messages
- get-local-version uses channel from pinned version

Depends on channel detection from previous commit.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-11 09:56:23 +00:00
sisyphus-dev-ai 612e9b3e03 fix(auto-update): implement channel-based version fetching
Add support for npm dist-tag channels (@beta, @next, @canary) in auto-update mechanism. Users pinned to oh-my-opencode@beta now correctly fetch and compare against beta channel instead of stable latest.

- Add extractChannel() to detect channel from version string
- Modify getLatestVersion() to accept channel parameter
- Update auto-update flow to use channel-aware fetching
- Add comprehensive tests for channel detection and fetching
- Resolves #687

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-11 09:56:09 +00:00
Ivan Marshall Widjaja f27e93bcc8 fix(agents): relax Momus input validation and tighten Prometheus Momus calls to avoid false rejections (#659) 2026-01-11 18:30:29 +09:00
popododo0720 10a5bab94d fix: use version-aware zip extraction on Windows (#563) 2026-01-11 18:21:48 +09:00
Sangrak Choi f615b012e7 fix: run build before npm publish to include correct version (#653) 2026-01-11 18:20:44 +09:00
Ashir 0809de8262 fix(skill-mcp): handle pre-parsed object arguments in parseArguments (#675) 2026-01-11 18:18:32 +09:00
Coaspe 24bdc7ea77 fix(prompts): add missing opening <Role> tag to Sisyphus system prompt (#682) 2026-01-11 18:15:44 +09:00
github-actions[bot] 8ff159bc2e release: v3.0.0-beta.5 2026-01-11 06:31:07 +00:00
YeonGyu-Kim 49b0b5e085 fix(prometheus-md-only): allow nested project paths with .sisyphus directory
Use regex /\.sisyphus[/\\]/i instead of checking first path segment. This fixes Windows paths where ctx.directory is parent of the actual project (e.g., project\.sisyphus\drafts\...).

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-11 15:28:09 +09:00
github-actions[bot] 1132be370c @Coaspe has signed the CLA in code-yeongyu/oh-my-opencode#682 2026-01-11 06:04:07 +00:00
github-actions[bot] f240dbb7ee release: v3.0.0-beta.4 2026-01-11 05:46:20 +00:00
YeonGyu-Kim 571810f1e7 fix(sisyphus-orchestrator): add cross-platform path validation for Windows support
Add isSisyphusPath() helper function that handles both forward slashes (Unix) and backslashes (Windows) using regex pattern /\.sisyphus[/\\]/.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-11 14:42:53 +09:00
YeonGyu-Kim 83d958580f librarian notice 2026-01-11 14:33:17 +09:00
github-actions[bot] f1e7b6ab1e @aw338WoWmUI has signed the CLA in code-yeongyu/oh-my-opencode#681 2026-01-11 05:03:55 +00:00
YeonGyu-Kim 1bbb61b1c2 fix(context-injector): inject via chat.message after claudeCodeHooks
- Revert messages.transform-only approach (experimental hook unreliable)
- Inject context in chat.message after claudeCodeHooks runs
- Order: keywordDetector → claudeCodeHooks → contextInjector
- Works independently of claude-code-hooks being enabled/disabled
- Ultrawork content now reliably injected to model
2026-01-11 12:33:20 +09:00
YeonGyu-Kim 2a95c91cab fix(context-injector): inject only via messages.transform to preserve UI
- Remove contextInjector call from chat.message hook chain
- Context injection now only happens in messages.transform hook
- This ensures UI displays original user message while model receives prepended context
- Fixes bug where commit message promised clone behavior but implementation mutated directly
2026-01-11 12:23:13 +09:00
Jeremy Gollehon 307d583ad6 fix(prometheus-md-only): cross-platform path validation for Windows support (#630) (#649)
Replace brittle string checks with robust path.resolve/relative validation:

- Fix Windows backslash paths (.sisyphus\plans\x.md) being incorrectly blocked
- Fix case-sensitive extension check (.MD now accepted)
- Add workspace confinement (block paths outside root even if containing .sisyphus)
- Block nested .sisyphus directories (only first segment allowed)
- Block path traversal attempts (.sisyphus/../secrets.md)
- Use ALLOWED_EXTENSIONS and ALLOWED_PATH_PREFIX constants (case-insensitive)

The new isAllowedFile() uses Node's path module for cross-platform compatibility
instead of string includes/endsWith which failed on Windows separators.
2026-01-11 12:21:50 +09:00
YeonGyu-Kim ce5315fbd0 refactor(keyword-detector): decouple from claude-code-hooks via ContextCollector pipeline
- keyword-detector now registers keywords to ContextCollector
- context-injector consumes and injects via chat.message hook
- Removed keyword detection logic from claude-code-hooks
- Hook order: keyword-detector → context-injector → claude-code-hooks
- ultrawork now works even when claude-code-hooks is disabled
2026-01-11 12:06:16 +09:00
Kenny 1c262a65fe feat: add OPENCODE_CONFIG_DIR environment variable support (#629)
- Add env var check to getCliConfigDir() for config directory override
- Update detectExistingConfigDir() to include env var path in locations
- Add comprehensive tests (7 test cases)
- Document in README

Closes #627
2026-01-11 11:48:36 +09:00
Arthur Andrade 0c127879c0 fix(lsp): cleanup orphaned LSP servers on session.deleted (#676)
* fix(lsp): cleanup orphaned LSP servers on session.deleted

When parallel background agent tasks complete, their LSP servers (for
repos cloned to /tmp/) remain running until a 5-minute idle timeout.
This causes memory accumulation with heavy parallel Sisyphus usage,
potentially leading to OOM crashes.

This change adds cleanupTempDirectoryClients() to LSPServerManager
(matching the pattern used by SkillMcpManager.disconnectSession())
and calls it on session.deleted events.

The cleanup targets idle LSP clients (refCount=0) for temporary
directories (/tmp/, /var/folders/) where agent tasks clone repos.

* chore: retrigger CI checks
2026-01-11 11:45:38 +09:00