justsisyphus
fbb4d46945
fix: explicit reset in mainSessionID test for parallel test safety
2026-01-28 14:40:15 +09:00
justsisyphus
5dc8d577a4
fix: add afterEach cleanup in session-state tests for parallel test isolation
2026-01-28 14:36:58 +09:00
justsisyphus
c249763d7e
fix: reset sessionAgentMap in _resetForTesting for test isolation
...
- Add sessionAgentMap.clear() to _resetForTesting()
- Prevents test pollution when tests run in parallel in CI
2026-01-28 14:33:14 +09:00
justsisyphus
6f348a8a5c
fix: resolve CI test timeouts with configurable timing
...
- Add timing.ts module for test-only timing configuration
- Replace hardcoded wait times with getTimingConfig()
- Enable all previously skipped tests (ralph-loop, session-state, delegate-task)
- Tests now complete in ~2s instead of timing out
2026-01-28 14:17:56 +09:00
justsisyphus
baf6358736
fix(background-agent): pass variant as top-level field in prompt body
2026-01-27 16:49:03 +09:00
justsisyphus
bd18f231f5
feat(sisyphus): add foundation schemas for tasks and swarm (Wave 1)
...
- Add SisyphusTasksConfig and SisyphusSwarmConfig to schema.ts
- Create Task JSON schema with Zod validation
- Create Mailbox IPC protocol message schemas
- Add storage utilities with Claude Code path compatibility
- 25 tests passing
2026-01-27 13:07:09 +09:00
justsisyphus
de439edc22
feat(subagent): block question tool at both SDK and hook level
...
- Add permission: [{ permission: 'question', action: 'deny' }] to session.create()
in background-agent and delegate-task for SDK-level blocking
- Add subagent-question-blocker hook as backup layer to intercept question tool
calls in tool.execute.before event
- Ensures subagents cannot ask questions to users and must work autonomously
2026-01-27 13:07:09 +09:00
justsisyphus
26b1c67964
fix(background-agent): disable question tool for background tasks
2026-01-26 18:25:06 +09:00
justsisyphus
04f2b513c6
feat(tmux-subagent): add replace action to prevent mass eviction
...
- Add column-based splittable calculation (getColumnCount, getColumnWidth)
- New decision tree: splittable → split, k=1 eviction → close+spawn, else → replace
- Add 'replace' action type using tmux respawn-pane (preserves layout)
- Replace oldest pane in-place instead of closing all panes when unsplittable
- Prevents scenario where all agent panes get closed leaving only 1
2026-01-26 15:25:11 +09:00
justsisyphus
8ebc933118
fix(tmux-subagent): enable 2D grid layout with divider-aware calculations
...
- Account for tmux pane dividers (1 char) in all size calculations
- Reduce MIN_PANE_WIDTH from 53 to 52 to fit 2 columns in standard terminals
- Fix enforceMainPaneWidth to use (windowWidth - divider) / 2
- Add virtual mainPane handling for close-spawn eviction loop
- Add comprehensive decision-engine tests (23 test cases)
2026-01-26 15:11:16 +09:00
justsisyphus
a67a35aea8
docs: regenerate AGENTS.md knowledge base via /init-deep
2026-01-26 14:56:55 +09:00
justsisyphus
5c7eb02d5b
chore(test): sync agent name casing in tests ( #1128 )
...
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
2026-01-26 12:10:30 +09:00
justsisyphus
68aa913499
refactor(tmux-subagent): state-first architecture with decision engine ( #1125 )
...
* refactor(tmux-subagent): add state-first architecture with decision engine
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(tmux): add pane spawn callbacks for background and sync sessions
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-26 12:02:37 +09:00
justsisyphus
90054b28ad
chore(docs): regenerate AGENTS.md knowledge base ( #1118 )
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-26 11:48:30 +09:00
justsisyphus
892b245779
fix(test): update builtin skills count from 3 to 4 ( #1126 )
...
* fix(test): update builtin skills count from 3 to 4 (dev-browser added)
* chore(ci): add block-master-pr workflow
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
2026-01-26 02:29:28 +00:00
YeonGyu-Kim
aead4aebd2
Add tmux pane management for background agent sessions ( #1094 )
...
* feat(config): add TmuxConfigSchema for tmux subagent pane management
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(shared): add tmux module structure
* feat(shared/tmux): implement tmux pane utilities
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* test(tmux-subagent): add TmuxSessionManager tests (TDD RED)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(tmux-subagent): implement TmuxSessionManager
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(integration): wire TmuxSessionManager with 500ms delay
- Task 5: Add 500ms delay in BackgroundManager after session creation
- Task 6: Wire TmuxSessionManager event handlers (session.created/deleted)
- Both changes integrate tmux pane management into plugin lifecycle
Co-authored-by: Sisyphus <ultrawork@oh-my-opencode>
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
Co-authored-by: Sisyphus <ultrawork@oh-my-opencode>
2026-01-25 15:34:10 +09:00
YeonGyu-Kim
bccc943173
feat(skills): add dev-browser skill with Windows support ( #1093 )
...
* feat(skills): add dev-browser skill with Windows support
* chore: trigger CI
2026-01-25 15:34:07 +09:00
justsisyphus
05904ca617
docs(agent-browser): add detailed installation guide with Playwright troubleshooting
2026-01-25 15:12:32 +09:00
YeonGyu-Kim
3af30b0a21
feat(skills): add agent-browser option for browser automation ( #1090 )
...
Add configurable browser automation allowing users to choose between
Playwright MCP (default) and Vercel's agent-browser CLI.
Changes:
- Add browser_automation_engine.provider config option
- Dynamic skill loading based on provider selection
- Comprehensive agent-browser CLI reference (inline in skills.ts)
- Propagate browserProvider to delegate_task and buildAgent
- Update documentation with provider comparison
Co-authored-by: Suyeol Jeon <devxoul@gmail.com >
Co-authored-by: YeonGyu Kim <code.yeongyu@gmail.com >
2026-01-25 15:02:41 +09:00
Sisyphus
24d065c43a
fix: update documentation to use load_skills instead of skills parameter ( #1088 )
...
All documentation, agent prompts, and skill descriptions were still
referencing the old 'skills' parameter name for delegate_task, but the
tool implementation requires 'load_skills' (renamed in commit aa2b052 ).
This caused confusion and errors for users following the docs.
Fixes #1008
Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com >
2026-01-25 13:45:00 +09:00
justsisyphus
fd72ce5ce7
docs: update AGENTS.md knowledge base ( 043b1a33)
...
- Add 7 missing hooks, remove deleted background-compaction
- Update line counts (atlas 572, sisyphus 450, config-manager 664)
- Add 18 undocumented shared utilities, remove stale references
- Add task-toast-manager, remove-deadcode command
- Update test count 90→95, add 4 complexity hotspots
2026-01-25 13:12:40 +09:00
justsisyphus
1c76e0513a
fix: add missing name property in loadBuiltinCommands causing TypeError on slashcommand
2026-01-25 12:46:03 +09:00
Sisyphus
20cca35157
fix(ralph-loop): skip user messages in transcript completion detection ( #622 ) ( #1086 )
...
* fix(ralph-loop): skip user messages in transcript completion detection (#622 )
The transcript-based completion detection was searching the entire JSONL
file for <promise>DONE</promise>, including user message entries. The
RALPH_LOOP_TEMPLATE instructional text contains this literal pattern,
which gets recorded as a user message, causing false positive completion
detection on every iteration. This made the loop always terminate at
iteration 1.
Fix: Parse JSONL entries line-by-line and skip entries with type 'user'
so only tool_result/assistant entries are checked for the completion
promise. Also remove the hardcoded <promise>DONE</promise> from the
template exit conditions as defense-in-depth.
* chore: changes by sisyphus-dev-ai
---------
Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com >
2026-01-25 12:34:42 +09:00
Stephen Wang
cf2320480f
Fix MCP disabled flag not removing previously loaded servers ( #985 )
...
When a later-loaded MCP config (e.g., .claude/.mcp.json) marks a server
as disabled, it now properly removes that server from both the servers
object and loadedServers array.
Previously, disabled servers were only skipped during loading, which
meant they wouldn't override servers loaded from earlier configs. This
made it impossible to disable project-level MCPs using local overrides.
Now the disabled flag works as expected: local configs can disable
servers defined in project or user configs.
2026-01-24 15:55:59 +09:00
YeonGyu-Kim
04633ba208
fix(models): update model names to match OpenCode Zen catalog ( #1048 )
...
* fix(models): update model names to match OpenCode Zen catalog
OpenCode Zen recently updated their official model catalog, deprecating
several preview and free model variants:
DEPRECATED → NEW (Official Zen Names):
- gemini-3-pro-preview → gemini-3-pro
- gemini-3-flash-preview → gemini-3-flash
- grok-code → gpt-5-nano (FREE tier maintained)
- glm-4.7-free → big-pickle (FREE tier maintained)
- glm-4.6v → glm-4.6
Changes:
- Updated 6 source files (model-requirements, delegate-task, think-mode, etc.)
- Updated 9 documentation files (installation, configurations, features, etc.)
- Updated 14 test files with new model references
- Regenerated snapshots to reflect catalog changes
- Removed duplicate think-mode entries for preview variants
Impact:
- FREE tier access preserved via gpt-5-nano and big-pickle
- All 55 model-related tests passing
- Zero breaking changes - pure string replacement
- Aligns codebase with official OpenCode Zen model catalog
Verified:
- Zero deprecated model names in codebase
- All model-related tests pass (55/55)
- Snapshots regenerated and validated
Affects: 30 files (6 source, 9 docs, 14 tests, 1 snapshot)
* fix(multimodal-looker): update fallback chain with glm-4.6v and gpt-5-nano
- Change glm-4.6 to glm-4.6v for zai-coding-plan provider
- Add opencode/gpt-5-nano as 4th fallback (FREE tier)
- Push gpt-5.2 to 5th position
Fallback chain now:
1. gemini-3-flash (google, github-copilot, opencode)
2. claude-haiku-4-5 (anthropic, github-copilot, opencode)
3. glm-4.6v (zai-coding-plan)
4. gpt-5-nano (opencode) - FREE
5. gpt-5.2 (openai, github-copilot, opencode)
* chore: update bun.lock
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
2026-01-24 15:30:35 +09:00
justsisyphus
444fbe396a
fix(delegate-task): use lowercase sisyphus-junior agent name in API calls
...
Previous fix (7ed7bf5c ) only updated Atlas → atlas, but missed Sisyphus-Junior.
OpenCode does case-sensitive agent lookup, causing crash when delegate_task
tried to spawn 'Sisyphus-Junior' (registered as 'sisyphus-junior').
- SISYPHUS_JUNIOR_AGENT constant: 'Sisyphus-Junior' → 'sisyphus-junior'
- agent-tool-restrictions key: 'Sisyphus-Junior' → 'sisyphus-junior'
- Updated related test mocks
2026-01-24 03:00:58 +09:00
justsisyphus
7ed7bf5c66
fix(agents): use lowercase agent names in API calls
...
- atlas/index.ts: agent: 'Atlas' -> 'atlas'
- start-work/index.ts: updateSessionAgent(..., 'Atlas') -> 'atlas'
- builtin-commands/commands.ts: agent: 'Atlas' -> 'atlas'
- Updated tests to match lowercase convention
2026-01-24 02:39:12 +09:00
justsisyphus
f8155e7d45
fix(session): preserve custom agent after switching ( #1017 )
...
Use setSessionAgent (first-write wins) instead of updateSessionAgent in chat.message handler. This prevents the default agent from overwriting a custom agent that was set via UI switch.
Fixes #893
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-23 16:25:26 +09:00
justsisyphus
7de376e24f
docs: regenerate all AGENTS.md files with updated structure
2026-01-23 02:14:08 +09:00
justsisyphus
638a314f6d
docs: update AGENTS.md files and configuration docs
...
Refresh documentation across all AGENTS.md files and update configuration documentation with latest features.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-22 22:48:50 +09:00
justsisyphus
ff92a4caa2
refactor: update plugin handlers and shared utils
...
Minor updates to config handler, plugin detector, index entry, and builtin command templates.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-22 22:48:36 +09:00
justsisyphus
72098213ee
refactor(task-toast): improve task toast manager types and logic
...
Add new toast types and improve state management for background task notifications. Update tests to cover new scenarios.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-22 22:46:36 +09:00
Nguyen Khac Trung Kien
e65d57285f
fix: respect OPENCODE_CONFIG_DIR environment variable across all config paths
...
Multiple files were hardcoding ~/.config/opencode paths instead of using
getOpenCodeConfigDir() which respects the OPENCODE_CONFIG_DIR env var.
This broke profile isolation features like OCX ghost mode, where users
set OPENCODE_CONFIG_DIR to a custom path but oh-my-opencode.json and
other configs weren't being read from that location.
Changes:
- plugin-config.ts: Use getOpenCodeConfigDir() directly
- cli/doctor/checks: Use getOpenCodeConfigDir() for auth and config checks
- tools/lsp/config.ts: Use getOpenCodeConfigDir() for LSP config paths
- command loaders: Use getOpenCodeConfigDir() for global command dirs
- hooks: Use getOpenCodeConfigDir() for hook config paths
- config-path.ts: Mark getUserConfigDir() as deprecated
- tests: Ensure OPENCODE_CONFIG_DIR is properly isolated in tests
2026-01-22 12:15:09 +07:00
Jonas Herrmansdsoerfer
1a4106120d
fix: use correct 'skills' directory path and respect OPENCODE_CONFIG_DIR
...
- Change skill directory from 'skill' (singular) to 'skills' (plural) to match OpenCode standard
- Use getOpenCodeConfigDir() to respect OPENCODE_CONFIG_DIR environment variable
- Update documentation and tests to reflect correct paths
Fixes #810
2026-01-21 13:12:27 +01:00
justsisyphus
d419bc302c
refactor: rename atlas agent to Atlas for naming consistency
...
- Rename agent name from 'atlas' to 'Atlas' (PascalCase like Sisyphus, Metis, Momus)
- Add migration for lowercase 'atlas' -> 'Atlas' for backward compatibility
- Keep hook name as 'atlas' (lowercase) to match other hook naming conventions
- Update all references in types, schema, hooks, commands, and tests
2026-01-21 11:19:00 +09:00
justsisyphus
f1887327ee
refactor(agents): remove document-writer agent in favor of writing category
...
- Delete document-writer.ts agent file
- Remove from types, schema, utils, index exports
- Remove tool restrictions entry
- Remove migration mappings
- Update atlas.ts to use category="writing" instead of agent="document-writer"
- Update init-deep command template
- Update all documentation (AGENTS.md, README.*, docs/)
- Regenerate schema.json
document-writer functionality is now handled via delegate_task with
category="writing" which uses the writing category's model config.
2026-01-20 16:52:31 +09:00
justsisyphus
52d9b30035
refactor(plugin): update atlas references
...
Update plugin handlers, commands, and integration points to use 'atlas' agent name. Start-work command and config handler now reference 'atlas'.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-20 15:55:09 +09:00
justsisyphus
bf3f8e5005
fix(background-agent): prevent premature task completion when agent still running
...
- Add session.status re-check in stability detection before completing
- Reset stablePolls if session is not idle (agent still working)
- Fix statusText to show CANCELLED instead of COMPLETED for non-completed tasks
2026-01-19 14:58:13 +09:00
justsisyphus
c6fb0c701b
fix(types): add null checks for optional sessionID and startedAt fields
2026-01-19 10:35:47 +09:00
justsisyphus
ebaab5aa60
test(background-agent): add non-blocking queue tests
2026-01-19 10:27:50 +09:00
justsisyphus
92942a562f
feat(ui): show pending/queued status in toast and background_output
2026-01-19 10:22:34 +09:00
justsisyphus
9710e10aca
fix(background-agent): use queuedAt for pending task TTL
2026-01-19 10:19:48 +09:00
justsisyphus
d6723a7d11
feat(background-agent): support cancelling pending tasks
2026-01-19 10:18:10 +09:00
justsisyphus
933c0c99c5
fix(background-agent): track pending tasks in pendingByParent
2026-01-19 10:16:02 +09:00
justsisyphus
54f448583c
feat(background-agent): implement per-key queue processor
2026-01-19 10:16:02 +09:00
justsisyphus
481770e599
feat(background-agent): make launch() non-blocking
2026-01-19 10:16:02 +09:00
justsisyphus
b053df42fb
feat(background-agent): add per-key queue structure
2026-01-19 10:16:02 +09:00
justsisyphus
426fb36040
feat(background-agent): add pending status and queuedAt field
2026-01-19 10:16:02 +09:00
justsisyphus
6d99b5c1fc
docs: regenerate hierarchical AGENTS.md with deep investigation
...
- Root: 181 lines with agent models, complexity hotspots, CI pipeline
- Hooks: 31 lifecycle hooks, execution order, patterns
- Tools: 20+ tools, LSP/AST-Grep specifics, registration
- Features: Background agents, Claude Code compat, skill MCP
- Agents: 10 agents with models, tool restrictions
- Shared: 43 utilities with usage patterns
- CLI: Commander.js entry, doctor checks, TUI framework
Generated via /init-deep with 12 parallel explore agents
2026-01-17 22:01:56 +09:00
YeonGyu-Kim
d13e8411f0
Add /ulw-loop command for ultrawork mode loop ( #867 )
...
* feat(ralph-loop): add ultrawork field to RalphLoopState
* feat(ralph-loop): persist ultrawork field in storage
* feat(ralph-loop): accept ultrawork option in startLoop
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(ralph-loop): prepend ultrawork keyword when mode active
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(ralph-loop): custom toast for ultrawork mode
* feat(ralph-loop): add /ulw-loop command for ultrawork mode
* fix(ralph-loop): add non-null assertion for type safety
* fix(ralph-loop): mirror argument parsing in ulw-loop handler
- Parse quoted prompts and strip flags from task text
- Support --max-iterations and --completion-promise options
- Add default prompt for empty input
- Fixes behavior inconsistency with /ralph-loop
---------
Co-authored-by: justsisyphus <sisyphus-dev-ai@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-17 19:56:50 +09:00