YeonGyu-Kim
c0636e5b0c
feat(agents,hooks): wire Sisyphus Gemini overlays and add Gemini verification reminder
...
Sisyphus: inject TOOL_CALL_MANDATE after intent gate, append delegation
and verification override sections for Gemini models.
Atlas hook: add VERIFICATION_REMINDER_GEMINI with stronger language -
'EXTREMELY SUSPICIOUS', explicit 'NOT reasoning, TOOL CALLS', and
consequence-driven framing for Gemini's optimistic tendencies.
2026-02-22 15:30:40 +09:00
YeonGyu-Kim
49e885d81d
feat(agents): wire Gemini prompt routing into Sisyphus-Junior, Atlas, Prometheus
...
Add 'gemini' to prompt source types and route Gemini models to new
Gemini-optimized prompts via isGeminiModel detection. Update barrel
exports for all 3 agent modules. All existing tests pass.
2026-02-22 15:30:40 +09:00
YeonGyu-Kim
bf33e6f651
feat(agents): add isGeminiModel detection function with TDD
...
Detects Gemini models via:
- Provider prefixes: google/, google-vertex/
- GitHub Copilot: github-copilot/gemini-*
- Model name: gemini-* (for proxied providers like litellm)
Follows existing isGptModel pattern. All 16 tests pass.
2026-02-22 15:30:40 +09:00
YeonGyu-Kim
da13a2f673
feat(agents): add Gemini-optimized prompts for Sisyphus, Sisyphus-Junior, Prometheus, Atlas
...
Gemini models are aggressively optimistic and avoid tool calls in favor of
internal reasoning. These prompts counter that with:
- TOOL_CALL_MANDATE sections forcing actual tool usage
- Anti-optimism checkpoints before claiming completion
- Stronger delegation enforcement (Gemini prefers doing work itself)
- Aggressive verification language (subagent results are 'EXTREMELY SUSPICIOUS')
- Mandatory thinking checkpoints in Prometheus (prevents jumping to conclusions)
- Scope discipline reminders (creativity → implementation quality, not scope creep)
2026-02-22 15:30:40 +09:00
YeonGyu-Kim
c806a35e49
fix(grep): format files_with_matches output as clean file paths
2026-02-22 15:19:26 +09:00
YeonGyu-Kim
b175c11b35
Merge pull request #2009 from JiHongKim98/fix/ripgrep-cpu-throttle
...
fix(tools): throttle ripgrep CPU usage with thread limits and concurrency control
2026-02-22 15:09:26 +09:00
YeonGyu-Kim
7b55cbab94
Merge pull request #2030 from acamq/feature/agent-input-notifications
...
feat(notification): alert when agent asks questions or needs permission
2026-02-22 15:09:24 +09:00
YeonGyu-Kim
6904cba061
Merge pull request #2029 from coleleavitt/fix/plug-resource-leaks
...
fix: plug resource leaks and add hook command timeout
2026-02-22 15:07:02 +09:00
YeonGyu-Kim
ac81e1d7cd
fix(hashline-edit): correct offset advancement and fuzzy index mapping in merge expand
...
- Track matchedLen separately for stripped continuation token matches
- Map fuzzy index back to original string position via character-by-character
scan that skips operator chars, fixing positional correctness
2026-02-22 14:50:59 +09:00
YeonGyu-Kim
9390f98f01
fix(hashline-edit): integrate continuation/merge helpers into expand logic and strengthen tool description
...
- maybeExpandSingleLineMerge now uses stripTrailingContinuationTokens and
stripMergeOperatorChars as fallback matching strategies
- Add 'refs interpreted against last read' atomicity clause to tool description
- Add 'output tool calls only; no prose' rule to tool description
2026-02-22 14:46:59 +09:00
YeonGyu-Kim
e6868e9112
fix(hashline-edit): align autocorrect, BOM/CRLF, and tool description with oh-my-pi
...
- Rewrite restoreOldWrappedLines to use oh-my-pi's span-scanning algorithm
- Add stripTrailingContinuationTokens and stripMergeOperatorChars helpers
- Fix detectLineEnding to use first-occurrence logic instead of any-match
- Fix applyAppend/applyPrepend to replace empty-line placeholder in empty files
- Enhance tool description with 7 critical rules, tag guidance, and anti-patterns
2026-02-22 14:40:18 +09:00
YeonGyu-Kim
5d1d87cc10
feat(hashline-edit): add autocorrect, BOM/CRLF normalization, and file creation support
...
Implements key features from oh-my-pi to improve agent editing success rates:
- Autocorrect v1: single-line merge expansion, wrapped line restoration,
paired indent restoration (autocorrect-replacement-lines.ts)
- BOM/CRLF normalization: canonicalize on read, restore on write
(file-text-canonicalization.ts)
- Pre-validate all hashes before mutation (edit-ordering.ts)
- File creation via append/prepend operations (new types + executor logic)
- Modular refactoring: split edit-operations.ts into focused modules
(primitives, ordering, deduplication, diff, executor)
- Enhanced tool description with operation choice guide and recovery hints
All 50 tests pass. TypeScript clean. Build successful.
2026-02-22 14:13:59 +09:00
YeonGyu-Kim
d1e5bd63c1
fix: address Oracle + Cubic review feedback for background-agent refactoring
...
- Revert getMessageDir to original join(MESSAGE_STORAGE, sessionID) behavior
- Fix dead subagentSessions.delete by capturing previousSessionID before tryFallbackRetry
- Add .unref() to process cleanup setTimeout to prevent 6s hang on Ctrl-C
- Add missing isUnstableAgent to fallback retry input mapping
- Fix process-cleanup tests to use exit listener instead of SIGINT at index 0
- Swap test filenames in compaction-aware-message-resolver to exercise skip logic correctly
2026-02-22 12:14:26 +09:00
YeonGyu-Kim
8d66d5641a
test(background-agent): add unit tests for extracted modules
...
Add 104 new tests across 4 test files:
- error-classifier.test.ts (80 tests): isRecord, isAbortedSessionError, getErrorText, extractErrorName, extractErrorMessage, getSessionErrorMessage
- fallback-retry-handler.test.ts (19 tests): retry logic, fallback chain, concurrency release, session abort, queue management
- process-cleanup.test.ts (7 tests): signal registration, multi-manager shutdown, cleanup on unregister
- compaction-aware-message-resolver.test.ts (13 tests): compaction agent detection, message resolution with temp dirs (pre-existing, verified)
Total background-agent tests: 161 -> 265 (104 new, 0 regressions)
2026-02-22 11:59:06 +09:00
YeonGyu-Kim
d53bcfbced
refactor(background-agent): extract inline logic from manager.ts into focused modules
...
Extract 5 concerns from BackgroundManager into dedicated modules:
- error-classifier.ts: enhance with extractErrorName, extractErrorMessage, getSessionErrorMessage, isRecord
- fallback-retry-handler.ts: standalone tryFallbackRetry with full retry logic
- process-cleanup.ts: registerManagerForCleanup/unregisterManagerForCleanup
- compaction-aware-message-resolver.ts: isCompactionAgent/findNearestMessageExcludingCompaction
- Delete notification-builder.ts (duplicate of background-task-notification-template.ts)
Manager.ts method bodies now delegate to extracted modules.
Wire duration-formatter.ts and task-poller.ts (existing but unused).
manager.ts: 2036 -> 1647 LOC (19% reduction).
All 161 existing tests pass unchanged.
2026-02-22 11:58:57 +09:00
Cole Leavitt
116f17ed11
fix: add proc.kill fallback when process group kill fails
2026-02-21 16:45:18 -07:00
Cole Leavitt
a31109bb07
fix: kill process group on timeout and handle stdin EPIPE
...
- Use detached process group (non-Windows) + process.kill(-pid) to kill
the entire process tree, not just the outer shell wrapper
- Add proc.stdin error listener to absorb EPIPE when child exits before
stdin write completes
2026-02-21 16:45:00 -07:00
Cole Leavitt
91530234ec
fix: handle signal-killed exit code and guard SIGTERM kill
...
- code ?? 0 → code ?? 1: signal-terminated processes return null exit code,
which was incorrectly coerced to 0 (success) instead of 1 (failure)
- wrap proc.kill(SIGTERM) in try/catch to match SIGKILL guard and prevent
EPERM/ESRCH from crashing on already-dead processes
2026-02-21 16:45:00 -07:00
Cole Leavitt
6aa1e96f9e
fix: plug resource leaks and add hook command timeout
...
- LSP signal handlers: store refs, return unregister handle, call in stopAll()
- session-tools-store: add per-session deleteSessionTools(), wire into session.deleted
- executeHookCommand: add 30s timeout with SIGTERM→SIGKILL escalation
2026-02-21 16:44:59 -07:00
acamq
f265e37cbc
fix(notification): use permission.asked and main-session fallback
2026-02-21 16:42:23 -07:00
acamq
931c0cd101
feat(notification): alert when agent asks questions or needs permission
2026-02-21 16:01:38 -07:00
YeonGyu-Kim
ead4a1bcf5
Merge branch 'origin/dev' into dev
...
Resolves conflicts in hashline-edit module:
- Accept Cubic-reviewed fixes from origin/dev
- Maintains: insert_before, insert_between, streaming formatters, strict validation
- Includes: hashline-chunk-formatter.ts extracted module
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-22 04:48:30 +09:00
YeonGyu-Kim
7e68690c70
fix(hashline-edit): address Cubic review issues - boundary echo, chunking dedup, empty stream alignment
...
- Fix single-line anchor-echo stripping to trigger empty-insert validation
- Fix trailing boundary-echo stripping for boundary-only payloads
- Extract shared chunking logic to hashline-chunk-formatter
- Align empty stream/iterable handling with formatHashLines
- Add regression tests for all fixes
2026-02-22 03:54:31 +09:00
YeonGyu-Kim
22b4f465ab
feat(hashline-edit): add anchor insert modes and strict insert validation
2026-02-22 03:38:47 +09:00
YeonGyu-Kim
a39f183c31
feat(hashline-edit): add anchor insert modes and strict insert validation
2026-02-22 03:38:04 +09:00
YeonGyu-Kim
f7c5c0be35
feat(sisyphus): add deep parallel delegation section to prompt
...
Add buildDeepParallelSection() function that injects guidance for non-Claude
models on parallel deep agent delegation:
- Detect when model is non-Claude and 'deep' category is available
- Inject instructions to decompose tasks and delegate to deep agents in parallel
- Give goals, not step-by-step instructions to deep agents
- Update Sisyphus prompt builder to pass model and call new function
This helps GPT-based Sisyphus instances leverage deep agents more effectively
for complex implementation tasks.
🤖 Generated with assistance of OhMyOpenCode
2026-02-22 03:20:57 +09:00
YeonGyu-Kim
121e1cb879
fix(delegate-task): aggressive tool description to prevent missing category/subagent_type
...
Problem: Agents frequently omit both 'category' and 'subagent_type' parameters
when calling the task() tool, causing validation failures. The JSON Schema
marks both as optional, and LLMs follow schema structure over description text.
Solution (Option A): Add aggressive visual warnings and failure-mode examples
to the tool description:
- ⚠️ CRITICAL warning header
- COMMON MISTAKE example showing what will FAIL
- CORRECT examples for both category and subagent_type usage
- Clear explanation that ONE must be provided
Tests: All 153 existing tests pass (no behavior change, only prompt improvement)
2026-02-22 02:51:03 +09:00
YeonGyu-Kim
b6b970d9cd
fix(test): use static imports and strategy-level spies in executor.test.ts for CI stability
2026-02-22 02:42:59 +09:00
YeonGyu-Kim
dd9df78564
fix(test): harden executor.test.ts mock isolation for CI batch runs
2026-02-22 02:31:27 +09:00
YeonGyu-Kim
538b1005ef
fix(test): flush fake timer microtasks in todo continuation tests
2026-02-22 02:18:47 +09:00
YeonGyu-Kim
27d5379215
refactor(hooks): remove beast-mode system integration
...
Remove the beast-mode-system hook and all transform wiring so Copilot-specific prompt injection is fully eliminated from the runtime pipeline.
2026-02-22 01:57:22 +09:00
YeonGyu-Kim
976798d0e3
feat(config): disable runtime_fallback by default (opt-in)
2026-02-22 01:54:34 +09:00
YeonGyu-Kim
9f10997987
feat(config): allow runtime_fallback to be configured as boolean
...
Enable simple boolean configuration for runtime_fallback:
- "runtime_fallback": true - Enable with defaults
- "runtime_fallback": false - Disable
- "runtime_fallback": { ... } - Advanced object config (existing)
Updated schema, event handler, chat-message handler, and session hooks
to handle both boolean and object formats.
2026-02-22 01:44:53 +09:00
YeonGyu-Kim
1c7eb55f9c
fix(hooks): use model cache availability with timeout for first-run cache creation
...
Replace fire-and-forget pattern with await + 10s timeout for initial
cache creation. Check model cache availability (not connected providers)
to properly coordinate with model-cache-warning hook.
Remove non-null assertion and add proper error logging.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-21 18:32:10 +09:00
YeonGyu-Kim
f0204b0514
fix(hooks): swap execution order to create cache before checking
...
Ensure cache creation runs before cache warning check to prevent false
'Model Cache Not Found' warnings on first run.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-21 18:32:01 +09:00
YeonGyu-Kim
6a31e911d8
feat(hooks): add task-reminder hook for task tool usage tracking
...
Injects a reminder after 10 tool turns without task tool usage. Tracks
per-session counters and cleans up on session deletion.
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-21 17:07:39 +09:00
YeonGyu-Kim
865ced72e4
feat(hooks): add hashline-edit-diff-enhancer for Write tool diff metadata
...
Captures file content before/after Write tool execution and injects unified
diff into tool output metadata. TUI reads metadata.diff for rendering.
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-21 17:07:34 +09:00
YeonGyu-Kim
90dccfbdaf
feat(delegate-task): pass directory option through skill discovery
...
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-21 17:07:29 +09:00
YeonGyu-Kim
66aebb1b59
fix: resolve ultrabrain review findings
...
- Remove runtime-fallback gate from session.status retry handler — runtime-fallback
has no session.status handler, so gating it causes retry signals to be silently dropped
- Fix background_output full_session arg description: default is true, not false
2026-02-21 16:40:15 +09:00
YeonGyu-Kim
fe415319e5
fix: resolve publish blockers for v3.7.4→v3.8.0 release
...
- Fix #1991 crash: optional chaining for task-history sessionID access
- Fix #1992 think-mode: add antigravity entries to HIGH_VARIANT_MAP
- Fix #1949 Copilot premium misattribution: use createInternalAgentTextPart
- Fix #1982 load_skills: pass directory to discoverSkills for project-level skills
- Fix command priority: sort scopePriority before .find(), project-first return
- Fix Google provider transform: apply in userFallbackModels path
- Fix ralph-loop TUI: optional chaining for event handler
- Fix runtime-fallback: unify dual fallback engines, remove HTTP 400 from retry,
fix pendingFallbackModel stuck state, add priority gate to skip model-fallback
when runtime-fallback is active
- Fix Prometheus task system: exempt from todowrite/todoread deny
- Fix background_output: default full_session to true
- Remove orphan hooks: hashline-edit-diff-enhancer (redundant with hashline_edit
built-in diff), task-reminder (dead code)
- Remove orphan config entries: 3 stale hook names from Zod schema
- Fix disabled_hooks schema: accept arbitrary strings for forward compatibility
- Register json-error-recovery hook in tool-guard pipeline
- Add disabled_hooks gating for question-label-truncator, task-resume-info,
claude-code-hooks
- Update test expectations to match new behavior
2026-02-21 16:24:18 +09:00
YeonGyu-Kim
ee5df1683e
refactor: remove slashcommand tool implementation
2026-02-21 14:38:18 +09:00
YeonGyu-Kim
552ad3a09c
refactor: remove unused 'message' variable from chat-message.ts
2026-02-21 14:31:42 +09:00
YeonGyu-Kim
8623f58a38
fix: resolve 5 deployment blockers (runtime-fallback race, hashline legacy, tmux spawn, db open)
...
- runtime-fallback: guard session.error with sessionRetryInFlight to prevent
double-advance during active retry; expand session.stop abort to include
sessionAwaitingFallbackResult; remove premature pendingFallbackModel clearing
from auto-retry finally block
- hashline-edit: add HASHLINE_LEGACY_REF_PATTERN for backward-compatible
LINE:HEX dual-parse in parseLineRef and normalizeLineRef
- tmux-subagent: defer session on null queryWindowState; unconditionally
re-queue deferred session on spawn failure (not just close+spawn)
- ultrawork-db: wrap new Database(dbPath) in try/catch to handle corrupted DB
- event: add try/catch guards around model-fallback logic in message.updated,
session.status, and session.error handlers
2026-02-21 05:59:30 +09:00
YeonGyu-Kim
5adbbad277
Merge pull request #2007 from code-yeongyu/fix/1901-ralph-loop-fresh-context
...
feat(ralph-loop): add strategy option for fresh context per iteration
2026-02-21 05:41:12 +09:00
YeonGyu-Kim
e58c2efa70
Merge pull request #2006 from code-yeongyu/fix/1920-auto-update-pinned
...
fix(auto-update): treat only explicit semver pins as user-pinned
2026-02-21 05:40:53 +09:00
YeonGyu-Kim
940e49b44c
fix(ralph-loop): use shared isRecord, fix quoted argument parsing for prompt and completion-promise
2026-02-21 05:36:11 +09:00
YeonGyu-Kim
590dc04be7
fix(ralph-loop): bind selectSession to tui context, use sourceSessionID for tool inheritance, handle flag-only arguments, fix test provider mocks
2026-02-21 05:36:11 +09:00
YeonGyu-Kim
daa0d48026
fix(rebase): remove duplicated hooks exports and event dispatch artifact
2026-02-21 05:36:11 +09:00
YeonGyu-Kim
db9df55e41
fix(session-recovery): fix SDK fallback part.tool mapping and nosuchtoolarror typo
2026-02-21 05:35:28 +09:00
YeonGyu-Kim
d08fa728b4
test(executor): add afterEach cleanup to prevent timer leaks on assertion failure
2026-02-21 05:35:28 +09:00