Commit Graph

208 Commits

Author SHA1 Message Date
justsisyphus 5f1dbe8ffd docs: regenerate AGENTS.md knowledge base via /init-deep 2026-01-26 14:56:55 +09:00
justsisyphus ac8b3c6143 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 6b4b432706 feat(shared): add connected-providers-cache for model availability (#1121)
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:53:41 +09:00
justsisyphus dc96df495d 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
YeonGyu-Kim 893bd8b153 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 59c98cca77 fix: generate skill/slashcommand descriptions synchronously when pre-provided (#1087)
* fix: generate skill/slashcommand tool descriptions synchronously when pre-provided

When skills are passed via options (pre-resolved), build the tool description
synchronously instead of fire-and-forget async. This eliminates the race
condition where the description getter returns the bare prefix before the
async cache-warming microtask completes.

Fixes #1039

* chore: changes by sisyphus-dev-ai

---------

Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
2026-01-25 14:52:50 +09:00
justsisyphus 2b8bf7f9e0 refactor: sync delegate_task schema with OpenCode Task tool (resume→session_id, add command param) 2026-01-25 13:57:45 +09:00
justsisyphus 6898d05ff6 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 0def3ed88e refactor: remove dead re-exports from tools barrel (getTmuxPath, DelegateTaskToolOptions, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS) 2026-01-25 12:59:19 +09:00
justsisyphus d722c8fbc2 feat: show detailed task info and resume instructions on background_cancel(all=true) (#1062)
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com>
2026-01-24 17:15:31 +09:00
Rouven Hi! d7b11234c8 fix(slashcommand): include built-in commands (like start-work) in discovery (#1031)
This ensures that commands defined in src/features/builtin-commands/commands.ts
(like /start-work, /refactor, /init-deep) are visible to the slashcommand tool
and the agent. Previously, only markdown-based commands were discovered.
2026-01-24 15:55:31 +09:00
YeonGyu-Kim 8af6774ae8 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 29d2f94979 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
yimingll 32113c5ad0 fix(lsp): add data dir to LSP server detection paths (#992)
OpenCode downloads LSP servers (like clangd) to ~/.local/share/opencode/bin,
but isServerInstalled() only checked ~/.config/opencode/bin. This caused
LSP tools to report servers as 'not installed' even when OpenCode had
successfully downloaded them.

Add ~/.local/share/opencode/bin to the detection paths to match OpenCode's
actual behavior.

Co-authored-by: yimingll <yimingll@users.noreply.github.com>
2026-01-23 16:37:40 +09:00
justsisyphus 4cf61cfb01 fix(skill): enforce agent restriction in createSkillTool (#1018)
* fix(skill): enforce agent restriction in createSkillTool

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* fix(skill): block restricted skills when agent context missing

Addresses cubic review feedback: previously agent-restricted skills
could be invoked when ctx or ctx.agent was undefined because the
guard only ran when ctx?.agent was truthy.

Changed condition from:
  skill.definition.agent && ctx?.agent && skill.definition.agent !== ctx.agent
To:
  skill.definition.agent && (!ctx?.agent || skill.definition.agent !== ctx.agent)

This ensures restricted skills are blocked unless the exact matching
agent is present in the context.

---------

Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com>
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-23 16:32:41 +09:00
justsisyphus cc8d2ee4d2 docs(agents): update AGENTS.md with current commit hash and line counts 2026-01-23 16:00:38 +09:00
justsisyphus 87c7e0e069 fix: model fallback properly falls through to system default
- Remove Step 3 in model-resolver that forced first fallbackChain entry
  even when unavailable, blocking system default fallback
- Add sisyphusJuniorModel option to delegate_task so agents["Sisyphus-Junior"]
  model override is respected in category-based delegation
- Update tests to reflect new fallback behavior
2026-01-23 10:56:31 +09:00
justsisyphus fc38ec2599 fix(delegate-task): reset model cache between tests 2026-01-23 02:59:03 +09:00
justsisyphus 87142466f6 fix(model-resolver): return variant from fallback chain, handle model name normalization
- Add variant to ModelResolutionResult return type
- Return variant from matched fallback entry
- Add normalizeModelName() for Claude model hyphen/period differences
- Add transformModelForProvider() for github-copilot model names
- Update delegate-task to use resolved variant (user config takes priority)
- Fix test expectations for new fallback behavior
2026-01-23 02:20:32 +09:00
justsisyphus f067f8e6fc docs: regenerate all AGENTS.md files with updated structure 2026-01-23 02:14:08 +09:00
justsisyphus d695005369 refactor: use case-insensitive matching for agent names
Apply case-insensitive utilities across agents, delegation, and tool
restrictions. Removes duplicate implementations from agents/utils.ts.
Agent validation now normalizes input to canonical names.
2026-01-23 00:55:01 +09:00
justsisyphus 090970dd32 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 1bd0db5735 fix(tools): update background-task and session-manager
Minor improvements to background task handling and session manager utilities.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-22 22:48:21 +09:00
justsisyphus 061dbcbca8 fix(tools): minor ast-grep improvements
Small fixes to AST-grep constants, tools, and utility functions.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-22 22:48:06 +09:00
justsisyphus 6958e691f2 refactor(delegate-task): enhance delegation with dynamic descriptions
Generate tool description dynamically from available categories and skills. Remove hardcoded DELEGATE_TASK_DESCRIPTION constant. Improve parameter handling with unified 'subagent_type' field replacing 'agent'.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-22 22:46:23 +09:00
Nguyen Khac Trung Kien 22a5c8e64d 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
justsisyphus 58295a6e66 Revert "fix(tools): override OpenCode HTTP-based session tools with local implementation"
This reverts commit 89bde5ce64.
2026-01-22 11:28:27 +09:00
justsisyphus 9e6f308992 fix(tools): override OpenCode HTTP-based session tools with local implementation
OpenCode v1.1.30+ added HTTP-based SessionList/Read/Search/Info tools that
require localhost:4096 server. Renamed our tools to PascalCase to override
them with local file-based implementation, fixing 'Unable to connect' errors.
2026-01-22 11:22:26 +09:00
Kenny 1ca647e6af Merge pull request #908 from gilbrotheraway/fix/skill-mcp-args
fix(skill-mcp): allow object args and strip quotes
2026-01-21 12:07:53 -05:00
Jonas Herrmansdsoerfer d2d609e8b2 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 650e464814 fix(delegate-task): wait for result when forcing unstable agents to background
Previously, unstable agents (gemini models, is_unstable_agent=true) were
forced to background mode but returned immediately with task ID. This
caused callers to lose visibility into results.

Now: launch as background for monitoring stability, but poll and wait
for completion, returning actual task output like sync mode.

🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-01-21 11:19:00 +09:00
gilbrotheraway 4bea713b46 fix(skill-mcp): add key type for zod v4 record schema
Zod v4 requires both keyType and valueType arguments for z.record().
The previous commit only passed valueType, causing TypeScript error TS2554.
2026-01-20 08:49:24 -03:00
justsisyphus 74e250fd4d test(delegate-task): add tests for DEFAULT_CATEGORIES variant handling
Adds test coverage for variant propagation from DEFAULT_CATEGORIES
to background tasks when no user categories are defined.
2026-01-20 18:55:08 +09:00
justsisyphus 44e7e4483f feat(delegate-task): force background mode for unstable agents
Detects unstable agents via is_unstable_agent config or gemini in model
name. Forces background mode even when run_in_background=false, with
system message explaining the forced conversion for monitoring.
2026-01-20 18:48:13 +09:00
justsisyphus 533c743c3f fix(delegate-task): category built-in model takes precedence over inherited model
Previously, when using categories like 'quick', the parent session's model
(e.g., Opus 4.5) would override the category's built-in model (e.g., Haiku).

Fixed priority: userConfig.model → category built-in → systemDefault

The inherited model from parent session no longer affects category-based
delegation - categories have their own explicit models.
2026-01-20 17:05:17 +09:00
justsisyphus d6d60924f7 refactor(delegate-task): restructure category system for unbiased model selection
- Remove temperature from all categories
- Consolidate CATEGORY_MODEL_CATALOG into DEFAULT_CATEGORIES
- Replace 'general' and 'most-capable' with 'unspecified-low' and 'unspecified-high'
- Add Selection_Gate to unspecified categories to force deliberate selection
- Update quick category to use claude-haiku-4-5
- Update all references and tests across codebase
2026-01-20 16:22:53 +09:00
justsisyphus bf59fd5aa9 feat(delegate-task): add category model catalog with default models
- Add CATEGORY_MODEL_CATALOG for category-specific default models
- ultrabrain: openai/gpt-5.2-codex + xhigh
- artistry: google/gemini-3-pro-preview + max
- most-capable: anthropic/claude-opus-4-5 + max
- writing: google/gemini-3-flash-preview
- general: anthropic/claude-sonnet-4-5
2026-01-20 16:04:42 +09:00
justsisyphus a2c3a48cfe 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 1224b93f5a refactor(hooks): rename sisyphus-orchestrator to atlas
Hook name is now 'atlas' (not 'atlas-orchestrator'). Directory renamed to src/hooks/atlas/. All references updated.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-20 15:52:13 +09:00
Kenny a8d25d7ee6 Merge pull request #883 from code-yeongyu/fix/remove-hardcoded-model-defaults
fix: remove hardcoded model defaults from categories and agents
2026-01-19 08:47:37 -05:00
gilbrotheraway 8028b9ca6a fix(skill-mcp): allow object args and strip quotes 2026-01-19 02:14:01 -03:00
Kenny fc669bfea5 fix: correct config.data.model access pattern and use dynamic config paths
- Fixed delegate-task/tools.ts to access openCodeConfig.data.model instead of openCodeConfig.model
- Updated error messages to use getOpenCodeConfigPaths() for cross-platform paths
- Fixed 12 test mocks to use correct { data: { model: ... } } structure
- Fixes delegation failing with 'requires a default model' even when model is configured
2026-01-18 22:08:27 -05:00
justsisyphus 512792f00e fix(types): add null checks for optional sessionID and startedAt fields 2026-01-19 10:35:47 +09:00
justsisyphus a4488a765e feat(ui): show pending/queued status in toast and background_output 2026-01-19 10:22:34 +09:00
justsisyphus b70b94b39f feat(background-agent): support cancelling pending tasks 2026-01-19 10:18:10 +09:00
Kenny 3284371467 restore gitignore 2026-01-17 20:40:55 -05:00
Kenny 76508cfc7d fix: remove hardcoded model defaults from categories and agents
BREAKING CHANGE: Model resolution overhauled

- Created centralized model-resolver.ts with priority chain:
  userModel → inheritedModel → systemDefaultModel
- Removed model field from all 7 DEFAULT_CATEGORIES entries
- Removed DEFAULT_MODEL constants from 10 agents
- Removed singleton agent exports (use factories instead)
- Made CategoryConfigSchema.model optional
- CLI no longer generates model overrides
- Empty strings treated as unset (uses fallback)

Users must now:
1. Use factory functions (createOracleAgent, etc.) instead of singletons
2. Provide model explicitly or use systemDefaultModel
3. Configure category models explicitly if needed

Fixes model fallback bug where hardcoded defaults overrode
user's OpenCode configured model.
2026-01-17 12:51:03 -05:00
justsisyphus f1393d3e85 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
justsisyphus 86af550056 refactor(delegate-task): use empty array instead of null for skills parameter
- Change skills type from string[] | null to string[]
- Allow skills=[] for no skills, reject skills=null
- Remove emojis from error messages and prompts
- Update tests accordingly
2026-01-17 21:25:02 +09:00
justsisyphus db41a6fb01 chore: remove 1,152 lines of verified dead code (#874)
* chore(deps): remove unused dependencies

Removed @openauthjs/openauth, hono, open, and xdg-basedir - none are imported in src/

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* chore(cleanup): remove unused agent prompts and tool files

Deleted:
- src/agents/build-prompt.ts (exports never imported)
- src/agents/plan-prompt.ts (exports never imported)
- src/tools/ast-grep/napi.ts (never imported)
- src/tools/interactive-bash/types.ts (never imported)

Verified by: LSP FindReferences + explore agents

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* chore(hooks): remove unused comment-checker filters

Deleted entire filters/ directory:
- filters/bdd.ts
- filters/directive.ts
- filters/docstring.ts
- filters/shebang.ts
- filters/index.ts

Not used by main hook (cli.ts uses external binary instead)

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* chore(hooks): remove unused comment-checker output and constants

Deleted:
- output/formatter.ts
- output/xml-builder.ts
- output/index.ts
- constants.ts

All 0 external imports - migrated to external binary

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* chore(hooks): remove unused pruning subsystem

Deleted pruning subsystem (dependency order):
- pruning-purge-errors.ts
- pruning-storage.ts
- pruning-supersede.ts
- pruning-executor.ts

Not imported by main recovery hook

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* chore(hooks): remove unused createBackgroundCompactionHook export

Removed export from index.ts - never imported in src/index.ts

Verified by: LSP FindReferences (only 2 refs: definition + barrel export)

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

---------

Co-authored-by: justsisyphus <sisyphus-dev-ai@users.noreply.github.com>
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-17 21:12:55 +09:00