YeonGyu-Kim
46a30cd7ec
Merge remote-tracking branch 'origin/dev' into refactor/modular-code-enforcement
...
# Conflicts:
# src/agents/utils.ts
# src/config/schema.ts
# src/features/background-agent/spawner/background-session-creator.ts
# src/features/background-agent/spawner/parent-directory-resolver.ts
# src/features/background-agent/spawner/tmux-callback-invoker.ts
# src/features/tmux-subagent/manager.ts
# src/hooks/interactive-bash-session/index.ts
# src/hooks/task-continuation-enforcer.test.ts
# src/index.ts
# src/plugin-handlers/config-handler.test.ts
# src/tools/background-task/tools.ts
# src/tools/call-omo-agent/tools.ts
# src/tools/delegate-task/executor.ts
2026-02-08 19:05:41 +09:00
YeonGyu-Kim
d5f0e75b7d
fix: restore permission config in background session creation
...
Add permission: [{ permission: 'question', action: 'deny', pattern: '*' }]
to client.session.create() call to prevent background sessions from
asking questions that go unanswered, causing hangs.
2026-02-08 18:39:36 +09:00
YeonGyu-Kim
6717349e5b
feat(claude-tasks): add CLAUDE_CODE_TASK_LIST_ID env var support
...
- Export session-storage from claude-tasks/index.ts
- Add CLAUDE_CODE_TASK_LIST_ID fallback support in storage.ts
- Add comprehensive tests for CLAUDE_CODE_TASK_LIST_ID handling
- Prefer ULTRAWORK_TASK_LIST_ID, fall back to CLAUDE_CODE_TASK_LIST_ID
- Both env vars are properly sanitized for path safety
🤖 Generated with assistance of OhMyOpenCode
2026-02-08 17:52:16 +09:00
YeonGyu-Kim
f1316bc800
refactor(tmux-subagent): split manager.ts into focused modules
...
- Extract polling logic to polling-manager.ts
- Extract session cleanup to session-cleaner.ts
- Extract session spawning to session-spawner.ts
- Extract cleanup logic to manager-cleanup.ts
- Reduce manager.ts from ~495 to ~345 lines
- Follow modular code architecture (200 LOC limit)
🤖 Generated with assistance of OhMyOpenCode
2026-02-08 17:51:38 +09:00
YeonGyu-Kim
42dbc8f39c
Fix Issue #1428 : Deny bash permission for Prometheus agent
...
- Change PROMETHEUS_PERMISSION bash from 'allow' to 'deny' to prevent unrestricted bash execution
- Prometheus is a read-only planner and should not execute bash commands
- The prometheus-md-only hook provides additional blocking as backup
2026-02-08 17:37:44 +09:00
YeonGyu-Kim
f3f6ba47fe
merge: integrate origin/dev into modular-enforcement branch
...
Resolves all merge conflicts, preserving our split module structure
while integrating all dev changes:
- Custom agent summaries support (parseRegisteredAgentSummaries)
- Background notification queue (enqueueNotificationForParent)
- Atlas shared git-worktree module (collectGitDiffStats, formatFileChanges)
- Ralph-loop withTimeout + DEFAULT_API_TIMEOUT=5000
- Session recovery assistant_prefill_unsupported error type
- Atlas agentOverrides forwarding
- Config handler plan model demotion (buildPlanDemoteConfig)
- Delegate-task agentOverrides, promptSyncWithModelSuggestionRetry, variant
- LSP init timeout + stale init detection
- isPlanFamily function + task-continuation-enforcer hook
- Handoff command
2026-02-08 17:34:47 +09:00
justsisyphus
a5489718f9
feat(commands): add /handoff builtin command with programmatic context synthesis
...
Port handoff concept from ampcode as a builtin command that extracts
detailed context summary from current session for seamless continuation
in a new session. Enhanced with programmatic context gathering:
- Add HANDOFF_TEMPLATE with phased extraction (gather programmatic
context via session_read/todoread/git, extract context, format, instruct)
- Gather concrete data: session history, todo state, git diff/status
- Include compaction-style sections: USER REQUESTS (AS-IS) verbatim,
EXPLICIT CONSTRAINTS verbatim, plus all original handoff sections
- Register handoff in BuiltinCommandName type and command definitions
- Include session context variables (SESSION_ID, TIMESTAMP, ARGUMENTS)
- Add 14 tests covering registration, template content, programmatic
gathering, compaction-style sections, and emoji-free constraint
2026-02-08 16:38:53 +09:00
YeonGyu-Kim
8dff42830c
refactor(builtin-skills): extract git-master metadata to separate module
...
Split prompt-heavy git-master.ts:
- git-master-skill-metadata.ts: skill metadata constants (name, desc, agent)
2026-02-08 16:21:50 +09:00
YeonGyu-Kim
9b841c6edc
refactor(mcp-oauth): extract OAuth authorization flow from provider.ts
...
Split provider.ts into focused modules:
- oauth-authorization-flow.ts: OAuth2 authorization code flow logic
2026-02-08 16:21:43 +09:00
YeonGyu-Kim
39dc62c62a
refactor(claude-code-plugin-loader): split loader.ts into per-type loaders
...
Extract plugin component loading into dedicated modules:
- discovery.ts: plugin directory detection
- plugin-path-resolver.ts: path resolution logic
- agent-loader.ts, command-loader.ts, hook-loader.ts
- mcp-server-loader.ts, skill-loader.ts
2026-02-08 16:21:37 +09:00
YeonGyu-Kim
46969935cd
refactor(skill-mcp-manager): split manager.ts into connection and client modules
...
Extract MCP client lifecycle management:
- connection.ts: getOrCreateClientWithRetry logic
- stdio-client.ts, http-client.ts: transport-specific creation
- oauth-handler.ts: OAuth token management
- cleanup.ts: session and global cleanup
- connection-type.ts: connection type detection
2026-02-08 16:21:28 +09:00
YeonGyu-Kim
51ced65b5f
refactor(opencode-skill-loader): split loader and merger into focused modules
...
Extract skill loading pipeline into single-responsibility modules:
- skill-discovery.ts, skill-directory-loader.ts, skill-deduplication.ts
- loaded-skill-from-path.ts, loaded-skill-template-extractor.ts
- skill-template-resolver.ts, skill-definition-record.ts
- git-master-template-injection.ts, allowed-tools-parser.ts
- skill-mcp-config.ts, skill-resolution-options.ts
- merger/ directory for skill merging logic
2026-02-08 16:21:19 +09:00
YeonGyu-Kim
f8b5771443
refactor(tmux-subagent): split manager and decision-engine into focused modules
...
Extract session lifecycle, polling, grid planning, and event handling:
- polling.ts: session polling controller with stability detection
- event-handlers.ts: session created/deleted handlers
- grid-planning.ts, spawn-action-decider.ts, spawn-target-finder.ts
- session-status-parser.ts, session-message-count.ts
- cleanup.ts, polling-constants.ts, tmux-grid-constants.ts
2026-02-08 16:21:04 +09:00
YeonGyu-Kim
e3bd43ff64
refactor(background-agent): split manager.ts into focused modules
...
Extract 30+ single-responsibility modules from manager.ts (1556 LOC):
- task lifecycle: task-starter, task-completer, task-canceller, task-resumer
- task queries: task-queries, task-poller, task-queue-processor
- notifications: notification-builder, notification-tracker, parent-session-notifier
- session handling: session-validator, session-output-validator, session-todo-checker
- spawner: spawner/ directory with focused spawn modules
- utilities: duration-formatter, error-classifier, message-storage-locator
- result handling: result-handler-context, background-task-completer
- shutdown: background-manager-shutdown, process-signal
2026-02-08 16:20:52 +09:00
YeonGyu-Kim
c7122b4127
fix: resolve all test failures and Cubic review issues
...
- Fix unstable-agent-babysitter: add promptAsync to test mock
- Fix claude-code-mcp-loader: isolate tests from user home configs
- Fix npm-dist-tags: encode packageName for scoped packages
- Fix agent-builder: clone source to prevent shared object mutation
- Fix add-plugin-to-opencode-config: handle JSONC with leading comments
- Fix auth-plugins/add-provider-config: error on parse failures
- Fix bun-install: clear timeout on completion
- Fix git-diff-stats: include untracked files in diff summary
2026-02-08 15:31:32 +09:00
YeonGyu-Kim
4c1e369176
Merge pull request #1657 from code-yeongyu/fix-1366-lsp-unblock
...
fix(lsp): reset safety block on server restart (#1366 )
2026-02-08 15:13:30 +09:00
YeonGyu-Kim
4738379ad7
fix(lsp): reset safety block on server restart to prevent permanent blocks ( #1366 )
2026-02-08 14:34:11 +09:00
YeonGyu-Kim
29155ec7bc
refactor: wave 1 - extract leaf modules, rename catch-all files, split index.ts hooks
...
- Split 25+ index.ts files into hook.ts + extracted modules
- Rename all catch-all utils.ts/helpers.ts to domain-specific names
- Split src/tools/lsp/ into ~15 focused modules
- Split src/tools/delegate-task/ into ~18 focused modules
- Separate shared types from implementation
- 155 files changed, 60+ new files created
- All typecheck clean, 61 tests pass
2026-02-08 13:57:26 +09:00
YeonGyu-Kim
f1fcc26aaa
fix(background-agent): serialize parent notifications ( #1582 )
2026-02-08 13:05:06 +09:00
YeonGyu-Kim
18c161a9cd
Merge pull request #1620 from potb/acp-json-error
...
fix: switch session.prompt() to promptAsync() — delegate broken in ACP
2026-02-07 22:52:39 +09:00
Peïo Thibault
414cecd7df
test: add promptAsync mocks to all test files for promptAsync migration
2026-02-07 14:41:46 +01:00
YeonGyu-Kim
ac6e7d00f2
fix(mcp-loader): also read ~/.claude/.mcp.json for CLI-managed user MCP config
...
PR #1616 replaced ~/.claude/.mcp.json with ~/.claude.json but both paths
should be read:
- ~/.claude.json: user/local scope MCP settings (mcpServers field)
- ~/.claude/.mcp.json: CLI-managed MCP servers (claude mcp add)
Fixes #814
2026-02-07 22:29:51 +09:00
Peïo Thibault
5f21ddf473
fix(background-agent): switch session.prompt to promptAsync
2026-02-07 13:42:20 +01:00
YeonGyu-Kim
2c394cd497
Merge pull request #1616 from code-yeongyu/fix/814-user-mcp-config
...
fix(mcp-loader): read user-level MCP config from ~/.claude.json (#814 )
2026-02-07 20:09:53 +09:00
YeonGyu-Kim
cf29cd137e
test: isolate user-level MCP config test from real homedir
2026-02-07 20:06:58 +09:00
YeonGyu-Kim
d3f8c7d288
Merge pull request #1615 from code-yeongyu/fix/1563-browser-provider-gating
...
fix(skill-loader): filter discovered skills by browserProvider (#1563 )
2026-02-07 20:04:08 +09:00
YeonGyu-Kim
1760367a25
fix(mcp-loader): read user-level MCP config from ~/.claude.json ( #814 )
2026-02-07 20:01:16 +09:00
YeonGyu-Kim
747edcb6e6
fix(skill-loader): filter discovered skills by browserProvider ( #1563 )
2026-02-07 20:01:15 +09:00
YeonGyu-Kim
d44f5db1e2
Merge pull request #1608 from code-yeongyu/fix/114-cascade-cancel
...
fix: cascade cancel descendant tasks when parent session is deleted (#114 )
2026-02-07 19:16:18 +09:00
YeonGyu-Kim
9040383da7
fix: cascade cancel descendant tasks when parent session is deleted ( #114 )
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-07 19:10:49 +09:00
YeonGyu-Kim
e4bbd6bf15
fix: allow string values for commit_footer config ( #919 )
2026-02-07 19:04:34 +09:00
YeonGyu-Kim
a691a3ac0a
refactor: migrate delegate_task to task tool with metadata fixes
...
- Rename delegate_task tool to task across codebase (100 files)
- Update model references: claude-opus-4-6 → 4-5, gpt-5.3-codex → 5.2-codex
- Add tool-metadata-store to restore metadata overwritten by fromPlugin()
- Add session ID polling for BackgroundManager task sessions
- Await async ctx.metadata() calls in tool executors
- Add ses_ prefix guard to getMessageDir for performance
- Harden BackgroundManager with idle deferral and error handling
- Fix duplicate task key in sisyphus-junior test object literals
- Fix unawaited showOutputToUser in ast_grep_replace
- Fix background=true → run_in_background=true in ultrawork prompt
- Fix duplicate task/task references in docs and comments
2026-02-06 21:35:30 +09:00
YeonGyu-Kim
4692809b42
Regenerate AGENTS.md hierarchy with latest codebase state
2026-02-06 19:07:12 +09:00
YeonGyu-Kim
ca8ec494a3
docs: fix stale references in AGENTS.md files
2026-02-06 17:20:19 +09:00
YeonGyu-Kim
1f64920453
chore: update claude-opus-4-5 references to claude-opus-4-6 (excludes antigravity models)
2026-02-06 15:09:07 +09:00
YeonGyu-Kim
6cfaac97b2
Merge pull request #1477 from kaizen403/fix/boulder-agent-tracking
...
fix: track agent in boulder state to fix session continuation (fixes #927 )
2026-02-05 17:41:05 +09:00
YeonGyu-Kim
48cb2033e2
fix(background-agent): gracefully handle aborted parent session in notifyParentSession
...
When the main session is aborted while background tasks are running,
notifyParentSession() would attempt to call session.messages() and
session.prompt() on the aborted parent session, causing exceptions
that could crash the TUI.
- Add isAbortedSessionError() helper to detect abort-related errors
- Add abort check in session.messages() catch block with early return
- Add abort check in session.prompt() catch block with early return
- Add test case covering aborted parent session scenario
Fixes TUI crash when aborting main session with running background tasks.
2026-02-05 11:31:54 +09:00
YeonGyu-Kim
a644d38623
fix: properly restore env vars using delete when originally undefined
2026-02-05 09:45:35 +09:00
YeonGyu-Kim
a459813888
Fix skill discovery priority and deduplication tests
2026-02-05 09:45:35 +09:00
YeonGyu-Kim
18e941b6be
fix: correct skill priority order and improve test coverage
...
- Changed priority order to: opencode-project > opencode > project > user
(OpenCode Global skills now take precedence over legacy Claude project skills)
- Updated JSDoc comments to reflect correct priority order
- Fixed test to use actual discoverSkills() for deduplication verification
- Changed test assertion from 'source' to 'scope' (correct field name)
2026-02-05 09:45:35 +09:00
YeonGyu-Kim
86ac39fb78
fix: include custom skills in delegate_task load_skills resolution
...
- Add deduplicateSkills() to prevent duplicate skill entries from multiple sources
- Priority order: opencode-project > project > opencode > user
- Add tests for deduplication behavior
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-05 09:45:35 +09:00
Rishi Vhavle
d8137c0c90
fix: track agent in boulder state to fix session continuation ( fixes #927 )
...
Add 'agent' field to BoulderState to track which agent (atlas) should
resume on session continuation. Previously, when user typed 'continue'
after interruption, Prometheus (planner) resumed instead of Sisyphus
(executor), causing all delegate_task calls to get READ-ONLY mode.
Changes:
- Add optional 'agent' field to BoulderState interface
- Update createBoulderState() to accept agent parameter
- Set agent='atlas' when /start-work creates boulder.json
- Use stored agent on boulder continuation (defaults to 'atlas')
- Add tests for new agent field functionality
2026-02-04 21:21:57 +05:30
YeonGyu-Kim
ce7478cde7
Merge pull request #1473 from code-yeongyu/feature/task-global-storage
...
feat(tasks): migrate storage to global config dir with ULTRAWORK_TASK_LIST_ID support
2026-02-04 15:56:31 +09:00
YeonGyu-Kim
8e349aad7e
fix(tasks): use path.isAbsolute() for cross-platform path detection
...
Fixes Cubic AI review finding: startsWith('/') doesn't work on Windows
where absolute paths use drive letters (e.g., C:\).
2026-02-04 15:37:12 +09:00
YeonGyu-Kim
1712907057
docs(tasks): update AGENTS.md for global storage architecture
2026-02-04 15:15:08 +09:00
YeonGyu-Kim
bf31e7289e
feat(tasks): migrate storage to global config dir with ULTRAWORK_TASK_LIST_ID support
2026-02-04 15:08:06 +09:00
YeonGyu-Kim
224afadbdb
fix(skill-loader): respect disabledSkills in async skill resolution
2026-02-04 15:03:57 +09:00
YeonGyu-Kim
85932fadc7
test(skill-loader): fix test isolation by resetting skill content
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-04 14:51:56 +09:00
YeonGyu-Kim
f79f164cd5
fix(skill-loader): deterministic collision handling for skill names
...
- Separate directory and file entries, process directories first
- Use Map to deduplicate skills by name (first-wins)
- Directory skills (SKILL.md, {dir}.md) take precedence over file skills (*.md)
- Add test for collision scenario
Addresses Oracle P2 review feedback from PR #1254
2026-02-04 13:52:06 +09:00
YeonGyu-Kim
dee8cf1720
Merge pull request #1370 from misyuari/fix/refactor-skills
...
fix: update skill resolution to support disabled skills functionality
2026-02-04 13:47:26 +09:00