YeonGyu-Kim
e29918e1be
refactor: fix import path and update test fixtures
...
- Fix import path in opencode-skill-loader/loader.ts
- Update executor.test.ts fixtures
2026-02-10 11:41:45 +09:00
YeonGyu-Kim
79d70c7edd
fix(atlas): allow boulder continuation for Sisyphus sessions
...
When boulderState.agent is not explicitly set (defaults to 'atlas'),
allow continuation for sessions where the last agent is 'sisyphus'.
This fixes the issue where boulder continuation was skipped when
Sisyphus took over the conversation after boulder creation.
2026-02-10 11:41:44 +09:00
YeonGyu-Kim
abb2b79282
docs: refresh all 13 hierarchical AGENTS.md files with current codebase state
2026-02-09 14:29:53 +09:00
YeonGyu-Kim
9f8027ed4e
fix: remove task-continuation-enforcer references after dev merge
...
Dev removed task-continuation-enforcer entirely. Remove all remaining
references from plugin hooks, event handler, tool-execute-before, and
config schema to align with origin/dev.
2026-02-08 21:11:07 +09:00
YeonGyu-Kim
0e6f72888e
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
1fe353c4af
fix: resolve test isolation failures in task-continuation-enforcer and config-handler tests
...
- Change BackgroundManager import to type-only to prevent global process
listener pollution across parallel test files
- Replace real BackgroundManager construction with createMockBackgroundManager
- Fix nested spyOn in config-handler tests to reuse beforeEach spy via
mockResolvedValue instead of re-spying inside test bodies
2026-02-08 18:03:08 +09:00
YeonGyu-Kim
d1bdc41ab2
refactor(hooks/interactive-bash-session): split monolithic hook into modules
...
- Convert index.ts to clean barrel export
- Extract hook implementation to hook.ts
- Extract terminal parsing to parser.ts
- Extract state management to state-manager.ts
- Reduce index.ts from ~276 to ~5 lines
- Follow modular code architecture principles
🤖 Generated with assistance of OhMyOpenCode
2026-02-08 17:51:48 +09:00
YeonGyu-Kim
d5c42f11c4
docs(AGENTS): update line counts and stats across all AGENTS.md files
...
- Update main AGENTS.md with current file sizes
- Update complexity hotspot line counts
- Update agent count from 11 to 32 files
- Update CLI utility count to 70
- Update test file count from 100+ to 163
🤖 Generated with assistance of OhMyOpenCode
2026-02-08 17:51:30 +09:00
YeonGyu-Kim
05f0998f93
fix: remove task-continuation-enforcer and restore task tool titles
2026-02-08 17:49:22 +09:00
YeonGyu-Kim
83595df63f
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
YeonGyu-Kim
bd21246a52
Merge pull request #1536 from code-yeongyu/feat/task-continuation-enforcer
...
feat(hooks): implement task-continuation-enforcer
2026-02-08 16:43:42 +09:00
YeonGyu-Kim
75124d0a83
fix: revert load_skills default and enforce via prompts instead
...
Revert .default([]) on load_skills schema back to required, restore the runtime error for missing load_skills, and add explicit load_skills=[] to all task() examples in agent prompts that were missing it.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-08 16:31:02 +09:00
YeonGyu-Kim
137e244a3d
refactor(hooks): split session-notification and unstable-agent-babysitter
...
Extract notification and babysitter logic:
- session-notification-formatting.ts, session-notification-scheduler.ts
- session-notification-sender.ts, session-todo-status.ts
- task-message-analyzer.ts: message analysis for babysitter hook
2026-02-08 16:23:56 +09:00
YeonGyu-Kim
1db01ce71b
refactor(rules-injector): split finder.ts into rule discovery modules
...
Extract rule finding logic:
- project-root-finder.ts: project root detection
- rule-file-finder.ts: rule file discovery
- rule-file-scanner.ts: filesystem scanning for rules
- rule-distance.ts: rule-to-file distance calculation
2026-02-08 16:22:33 +09:00
YeonGyu-Kim
b367765500
refactor(interactive-bash-session): extract tracker and command parser
...
Split hook into focused modules:
- interactive-bash-session-tracker.ts: session tracking logic
- tmux-command-parser.ts: tmux command parsing utilities
2026-02-08 16:22:25 +09:00
YeonGyu-Kim
cac64c83a7
refactor(claude-code-hooks): extract handlers and session state
...
Split hook into per-concern modules:
- handlers/ directory for individual hook handlers
- session-hook-state.ts: session-level hook state management
2026-02-08 16:22:17 +09:00
YeonGyu-Kim
97a3b93fa3
refactor(ralph-loop): split hook into state controller and event handler modules
...
Extract Ralph loop lifecycle management:
- loop-state-controller.ts: start/stop/recovery state machine
- ralph-loop-event-handler.ts: event handling logic
- continuation-prompt-builder.ts, continuation-prompt-injector.ts
- completion-promise-detector.ts, loop-session-recovery.ts
- message-storage-directory.ts
2026-02-08 16:22:10 +09:00
YeonGyu-Kim
a05ef99130
refactor(context-window-recovery): split executor and storage into focused modules
...
Extract recovery strategies and storage management:
- recovery-strategy.ts, aggressive-truncation-strategy.ts
- summarize-retry-strategy.ts, target-token-truncation.ts
- empty-content-recovery.ts, message-builder.ts
- tool-result-storage.ts, storage-paths.ts, state.ts
- client.ts, tool-part-types.ts
2026-02-08 16:22:01 +09:00
YeonGyu-Kim
0cdb6e0727
Merge pull request #1658 from code-yeongyu/fix-1233
...
fix: detect completion tags in ralph/ULW loop (#1233 )
2026-02-08 15:51:16 +09:00
YeonGyu-Kim
3ec0a4f5a4
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
cea97f896b
refactor: wave 2 - split atlas, auto-update-checker, session-recovery, todo-enforcer, background-task hooks
...
- Extract atlas/ into 15 focused modules (hook, event handler, tool policies, types, etc.)
- Split auto-update-checker into checker/ and hook/ subdirectories with single-purpose files
- Decompose session-recovery into separate recovery strategy files per error type
- Extract todo-continuation-enforcer from monolith to directory with dedicated modules
- Split background-task/tools.ts into individual tool creator files
- Extract command-executor, tmux-utils into focused sub-modules
- Split config/schema.ts into domain-specific schema files
- Decompose cli/config-manager.ts into focused modules
- Rollback skill-mcp-manager, model-availability, index.ts splits that broke tests
- Fix all import path depths for moved files (../../ -> ../../../)
- Add explicit type annotations to resolve TS7006 implicit any errors
Typecheck: 0 errors
Tests: 2359 pass, 5 fail (all pre-existing)
2026-02-08 15:01:42 +09:00
YeonGyu-Kim
df4d8fe692
fix: detect completion tags in ralph/ULW loop to stop iteration ( #1233 )
2026-02-08 14:50:36 +09:00
YeonGyu-Kim
f4cb1c21c9
fix(lsp): reset safety block on server restart to prevent permanent blocks ( #1366 )
2026-02-08 14:34:11 +09:00
YeonGyu-Kim
cd0f70f12f
refactor: extract git worktree parser from atlas hook
2026-02-08 14:01:31 +09:00
YeonGyu-Kim
df03300211
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
441cbf5901
refactor: extract git worktree parser from atlas hook
2026-02-08 13:30:00 +09:00
YeonGyu-Kim
e20da1fa25
feat: auto-recover from Anthropic assistant message prefill errors
...
When Anthropic models reject requests with 'This model does not support
assistant message prefill', detect this as a recoverable error type and
automatically send 'Continue' once to resume the conversation.
Extends session-recovery hook with new 'assistant_prefill_unsupported'
error type. The existing session.error handler in index.ts already sends
'continue' after successful recovery, so no additional logic needed.
2026-02-08 13:16:16 +09:00
YeonGyu-Kim
822686292f
test: fix ralph-loop tests by adding promptAsync to mock
...
The ralph-loop hook calls promptAsync in the implementation, but the
test mock only defined prompt(). Added promptAsync with identical
behavior to make tests pass.
- All 38 ralph-loop tests now pass
- Total test suite: 2361 pass, 3 fail (unrelated to this change)
2026-02-08 02:41:29 +09:00
Peïo Thibault
7636e45d61
test: add promptAsync mocks to all test files for promptAsync migration
2026-02-07 14:41:46 +01:00
Peïo Thibault
35f889b175
test(todo-continuation): add promptAsync mocks for migrated hook
2026-02-07 13:51:28 +01:00
Peïo Thibault
ed563d3cc9
fix(hooks): switch session.prompt to promptAsync in all hooks
2026-02-07 13:42:24 +01:00
YeonGyu-Kim
9b5eda9920
Merge pull request #1618 from code-yeongyu/fix/594-user-prompt-submit-fires-once
...
fix(hooks): fire UserPromptSubmitHooks on every prompt, not just first (#594 )
2026-02-07 20:09:19 +09:00
YeonGyu-Kim
3495f00af0
fix(hooks): fire UserPromptSubmitHooks on every prompt, not just first ( #594 )
2026-02-07 20:03:52 +09:00
YeonGyu-Kim
0c54ae39d4
Merge pull request #1584 from code-yeongyu/fix/441-matcher-hooks-undefined
...
fix(hooks): add defensive null check for matcher.hooks to prevent Windows crash (#441 )
2026-02-07 20:01:28 +09:00
YeonGyu-Kim
9e27752399
Merge pull request #1614 from code-yeongyu/fix/1501-ulw-plan-loop
...
fix(ultrawork): widen isPlannerAgent matching to prevent ULW infinite plan loop (#1501 )
2026-02-07 19:59:41 +09:00
YeonGyu-Kim
d0a245436b
fix: skip ultrawork injection for plan-like agents ( #1501 )
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-07 19:52:47 +09:00
YeonGyu-Kim
ea8615dcc2
Merge pull request #1610 from code-yeongyu/fix/96-compaction-dedup-recovery
...
fix: wire deduplication into compaction recovery for prompt-too-long errors (#96 )
2026-02-07 19:28:49 +09:00
YeonGyu-Kim
44e3180b62
fix: rewrite dedup recovery test to mock module instead of filesystem
2026-02-07 19:26:06 +09:00
YeonGyu-Kim
be07964918
Merge pull request #1611 from code-yeongyu/fix/1481-1483-compaction
...
fix: prevent compaction from inserting arbitrary constraints and preserve todo state (#1481 , #1483 )
2026-02-07 19:23:50 +09:00
YeonGyu-Kim
985bf8bbc9
fix: use lazy storage dir resolution to fix CI test flakiness
2026-02-07 19:23:24 +09:00
YeonGyu-Kim
c9af4f33e8
fix: wire deduplication into compaction recovery for prompt-too-long errors ( #96 )
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-07 19:18:12 +09:00
YeonGyu-Kim
42843013e2
refactor: extract context window recovery hook
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-07 19:17:55 +09:00
YeonGyu-Kim
194c0795af
fix: add compaction todo preserver hook
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-07 19:15:46 +09:00
YeonGyu-Kim
c52ed314a0
fix: avoid invented compaction constraints
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-07 19:15:41 +09:00
YeonGyu-Kim
2a64388db2
Merge pull request #1593 from code-yeongyu/fix/prometheus-plan-overwrite
...
fix: allow Prometheus to overwrite .sisyphus/*.md plan files
2026-02-07 19:04:47 +09:00
YeonGyu-Kim
0a3dba02a3
fix: normalize resolvedPath before startsWith check
...
Addresses cubic review feedback — resolvedPath may contain
non-canonical segments when filePath is absolute, causing
the startsWith check against sisyphusRoot to fail.
2026-02-07 19:01:28 +09:00
YeonGyu-Kim
66cbfe03b7
fix: boulder continuation now respects /stop-continuation guard
...
Add isContinuationStopped check to atlas hook's session.idle handler
so boulder continuation stops when user runs /stop-continuation.
Previously, todo continuation and session recovery checked the guard,
but boulder continuation did not — causing work to resume after stop.
Fixes #1575
2026-02-07 18:50:13 +09:00
YeonGyu-Kim
31f03401b4
fix: anchor .sisyphus path check to ctx.directory to prevent false positives
...
- Uses path.join(ctx.directory, '.sisyphus') + sep as prefix instead of loose .includes()
- Prevents false positive when .sisyphus exists in parent directories outside project root
- Adds test for the false positive case (cubic review feedback)
2026-02-07 18:49:16 +09:00
YeonGyu-Kim
9390e23377
fix: trim whitespace from tool names to prevent invalid tool calls
...
Some models (e.g. kimi-k2.5) return tool names with leading spaces
like ' delegate_task', causing tool matching to fail.
Add .trim() in transformToolName() and defensive trim in claude-code-hooks.
Fixes #1568
2026-02-07 13:12:47 +09:00
YeonGyu-Kim
2e99e5382e
fix: allow Prometheus to overwrite .sisyphus/*.md plan files
...
Add exception in write-existing-file-guard for .sisyphus/*.md files
so Prometheus can rewrite plan files without being blocked by the guard.
The prometheus-md-only hook (which runs later) still validates that only
Prometheus can write to these paths, preserving security.
Fixes #1576
2026-02-07 13:12:44 +09:00