YeonGyu-Kim
03eaa429ce
fix: address 5 edge cases from review-work findings
...
- C3: include command args in auto-slash-command dedup key
- H2: track completed task summaries for ALL COMPLETE message
- H9: increment tmux close retry count on re-mark
- H8: detect stale MCP connections after disconnect+reconnect race
- H8: guard disconnectedSessions growth for non-MCP sessions
- C1: await tmux cleanup in plugin dispose lifecycle
2026-03-12 01:37:03 +09:00
YeonGyu-Kim
b8aea50dfa
test(background-agent): update completion timer test for per-task cleanup
...
Test expected timers only after allComplete, but H2 fix intentionally
decoupled per-task cleanup from sibling completion state. Updated
assertion to expect timer after individual task notification.
2026-03-12 01:37:03 +09:00
YeonGyu-Kim
b4e13883b1
fix(background-agent): fix 3 memory leaks in task lifecycle management
...
H3: cancelTask(skipNotification=true) now schedules task removal.
Previously the early return path skipped cleanup, leaking task objects
in this.tasks Map permanently. Extracted scheduleTaskRemoval() helper
called from both skipNotification and normal paths.
H2: Per-task completion cleanup timer decoupled from allComplete check.
Previously cleanup timer only ran when ALL sibling tasks completed. Now
each finished task gets its own removal timer regardless of siblings.
H1+C2: TaskHistory.clearAll() added and wired into shutdown(). Added
clearSession() calls on session error/deletion and prune cycles.
taskHistory was the only data structure missed by shutdown().
Tests: 10 pass (3 cancel + 3 completion + 4 history)
2026-03-12 01:37:03 +09:00
YeonGyu-Kim
aaa54858a3
fix(background-agent): extend default no-progress stale timeout to 30 minutes
...
Give never-updated background tasks a longer default window and keep the default-threshold regression coverage aligned with that behavior.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-12 01:14:35 +09:00
YeonGyu-Kim
7dddf99d9a
Merge pull request #2470 from code-yeongyu/fix/terminal-task-retention-ttl
...
fix(background-agent): add TTL for terminal task retention
2026-03-11 21:57:33 +09:00
YeonGyu-Kim
0d9f001c11
fix(background-agent): add TTL for terminal task retention to prevent unbounded growth
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-11 21:52:48 +09:00
YeonGyu-Kim
cc1c23032f
fix(background-agent): handle SDK error response in spawn limit lineage lookup
...
- Check response.error and !response.data after session.get() to fail closed
- Prevents unlimited spawning when SDK returns non-throwing error responses
- Added regression tests for SDK error and missing data scenarios
2026-03-11 21:45:40 +09:00
YeonGyu-Kim
4b5c47172d
Merge pull request #2449 from code-yeongyu/fix/issue-2330-v2
...
fix(background-agent): cap recursive subagent spawning
2026-03-11 21:00:34 +09:00
YeonGyu-Kim
594233183b
fix(background-agent): fail closed on spawn lineage lookup errors
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-11 20:57:09 +09:00
YeonGyu-Kim
e3b17da4bd
fix(background-agent): preserve terminal tasks until notification cleanup
...
Route terminal task cleanup through parent notifications so cancelled and errored tasks stay visible until delayed cleanup finishes.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-11 20:50:49 +09:00
YeonGyu-Kim
8c5f9b8082
fix(background-agent): skip terminal tasks during stale pruning
...
Prevent TTL pruning from deleting terminal tasks before delayed notification cleanup runs.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-11 20:50:49 +09:00
YeonGyu-Kim
a179ebe0b9
Count sync subagent spawns against descendant limits
2026-03-11 20:50:11 +09:00
YeonGyu-Kim
4a39c83eb5
Limit recursive subagent spawning
2026-03-11 20:50:10 +09:00
YeonGyu-Kim
3550305af8
Merge branch 'dev' into fix/issue-2232
2026-03-11 20:20:04 +09:00
YeonGyu-Kim
413e8b73b7
Add session permission support to background agents for denying questions
...
Implements question-denied session permission rules when creating child
sessions via background task delegation. This prevents subagents from
asking questions by passing explicit permission configuration during
session creation.
🤖 GENERATED WITH ASSISTANCE OF OhMyOpenCode
2026-03-11 19:42:46 +09:00
YeonGyu-Kim
1120885fd0
fix(background-agent): release interrupted task slots during startup cleanup
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-09 12:36:49 +09:00
YeonGyu-Kim
85aa744c8a
fix(background-agent): clear toast tracking when tasks stop
...
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-03-09 11:39:04 +09:00
YeonGyu-Kim
beb89faa0f
Merge pull request #2388 from code-yeongyu/fix/background-output-undefined-status-2387
...
fix: handle undefined sessionStatus in pollRunningTasks (#2387 )
2026-03-08 23:54:58 +09:00
YeonGyu-Kim
dc370f7fa8
fix: handle undefined sessionStatus in pollRunningTasks ( #2387 )
...
When a completed session is no longer returned by session.status(),
allStatuses[sessionID] is undefined. Previously this fell through to
a 'still running' log, leaving the task stuck as running forever.
Match the sync-session-poller pattern: only continue (skip completion
check) when sessionStatus EXISTS and is not idle. When undefined,
fall through to validateSessionHasOutput + checkSessionTodos +
tryCompleteTask, same as idle.
2026-03-08 23:42:11 +09:00
YeonGyu-Kim
2b5dec5333
fix(background-agent): use compaction-aware prompt context in manager
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-08 02:23:33 +09:00
YeonGyu-Kim
c789baf1d9
fix(background-agent): merge prompt context across compaction gaps
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-08 02:23:27 +09:00
YeonGyu-Kim
fade6740ae
chore: update GPT-5.2 references to GPT-5.4
...
Align runtime defaults, tests, docs, and generated artifacts with the newer GPT-5.4 baseline. Keep think-mode and prompt-routing expectations consistent after the model version bump.
2026-03-07 05:46:05 +09:00
YeonGyu-Kim
23dcd99c9a
docs(agents): refresh generated AGENTS guides
...
🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-03-06 17:59:05 +09:00
YeonGyu-Kim
33d39597ae
docs(agents): regenerate AGENTS.md hierarchy with updated metrics and model configs
...
- 1208→1243 TS files (+35), 143k→155k LOC (+12k)
- Update all agent models: Sisyphus, Hephaestus, Oracle, Librarian, Atlas, Metis, Momus
- Add 6 new hook directories (39→45 dirs): beast-mode-system, hashline-edit-diff-enhancer, anthropic-image-context, task-reminder, compaction-todo-preserver, runtime-fallback
- Update category models: visual-engineering/artistry gemini-3-pro→gemini-3.1-pro
- Add 2 config schema files: fallback-models.ts, runtime-fallback.ts
- Timestamp: 2026-03-02 | Commit: 1c2caa09
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-03-02 23:40:38 +09:00
YeonGyu-Kim
050b93bebb
fix(background-agent): clean pendingNotifications on session.deleted
2026-02-27 03:00:39 +09:00
YeonGyu-Kim
d425f9bb80
fix(models): update Gemini 3 to 3.1 Pro and add Kimi to writing category fallback
...
Closes #2065
Closes #1968
2026-02-26 21:01:26 +09:00
YeonGyu-Kim
840c612be8
fix(background-agent): queue notifications for idle parent sessions
...
When a background task completes and the parent session is waiting for
user input, promptAsync() fails with an aborted error. Previously the
notification was silently dropped — lost forever.
Fix: queue the notification text in-memory on the BackgroundManager
when promptAsync fails with an aborted/idle error. On the user's next
message to that session, the queued notifications are injected into the
chat context before the agent sees the message.
- BackgroundManager: add pendingNotifications map + queuePendingNotification()
and injectPendingNotificationsIntoChatMessage() methods
- background-notification hook: add chat.message handler that calls injection
- chat-message.ts: wire backgroundNotificationHook.chat.message into the
message processing chain
- Add tests covering queue-on-abort and next-message delivery
2026-02-25 16:26:31 +09:00
YeonGyu-Kim
73453a7191
docs(agents): update hook counts 44→46, add hashline-edit documentation
...
- Update root AGENTS.md: hook count 44→46, commit fcb90d92 , generated 2026-02-24
- Update src/AGENTS.md: core hooks 35→37, session hooks 21→23
- Update src/hooks/AGENTS.md: 46 hooks total, add modelFallback/noSisyphusGpt/noHephaestusNonGpt/runtimeFallback, jsonErrorRecovery moved to tool-guard (tier 2)
- Create src/tools/hashline-edit/AGENTS.md (93 lines): documents three-op model, LINE#ID format, execution pipeline
- Refresh timestamps: 2026-02-21→2026-02-24 on 28 files
- Update plugin/AGENTS.md hook composition counts
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-25 00:02:05 +09:00
YeonGyu-Kim
2428a46e6d
refactor(features/background-agent): remove dead code submodules
...
Delete 15 unused files in background-agent module:
- background-task-completer.ts
- format-duration.ts
- message-dir.ts
- parent-session-context-resolver.ts
- parent-session-notifier.ts (and its test file)
- result-handler-context.ts
- result-handler.ts
- session-output-validator.ts
- session-task-cleanup.ts
- session-todo-checker.ts
- spawner/background-session-creator.ts
- spawner/concurrency-key-from-launch-input.ts
- spawner/spawner-context.ts
- spawner/tmux-callback-invoker.ts
Update index.ts barrel and manager.ts/spawner.ts imports
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-23 02:43:01 +09:00
YeonGyu-Kim
a3e4f904a6
refactor(background-agent): wire session-idle-event-handler into manager, add unit tests
...
The extracted handleSessionIdleBackgroundEvent was never imported by
manager.ts — dead code from incomplete refactoring (d53bcfbc ). Replace
the inline session.idle handler (58 LOC) with a call to the extracted
function, remove unused MIN_IDLE_TIME_MS import, and add 13 unit tests
covering all edge cases.
2026-02-22 15:30:40 +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
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
b1eccf7425
docs: update all 31 AGENTS.md files with current project state
2026-02-21 04:38:18 +09:00
YeonGyu-Kim
fb4530cafe
fix(provider-matching): normalize provider names to lowercase for connectivity checks
...
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-21 03:33:20 +09:00
YeonGyu-Kim
9059a4fdbc
fix(model-requirements): remove custom quotio provider, restore standard providers
2026-02-21 03:03:57 +09:00
YeonGyu-Kim
481106a12e
Merge branch 'pr-1959' into dev
...
# Conflicts:
# src/hooks/index.ts
# src/plugin/event.ts
# src/tools/delegate-task/sync-task.ts
2026-02-21 02:49:39 +09:00
youming.tang
cd3e0ca124
fix(session-category-registry): cleanup entries for task sessions
2026-02-21 02:31:42 +09:00
YeonGyu-Kim
95491675e8
fix: correct spread order in spawner.ts for tool restrictions
2026-02-21 02:29:00 +09:00
sjawhar
03f7643ee1
fix(background-agent): respect agent tool restrictions in background task launch
...
Reorder tool permission spread so getAgentToolRestrictions() comes
last, allowing agent-specific restrictions to override defaults.
Fixes all 3 sites: task-starter.ts (startTask), manager.ts (startTask
and resume paths).
Previously, defaults like call_omo_agent:true would stomp agent
restrictions (e.g., explore's call_omo_agent:false) due to JS
spread semantics.
2026-02-21 02:29:00 +09:00
VespianRex
bf51919a79
Address review feedback for fallback fixes
2026-02-20 17:46:12 +02:00
VespianRex
f5f1d1d4c2
Fix model fallback across main/background/sync agents
2026-02-20 17:45:53 +02:00
Maxim Harizanov
64e8e164aa
fix(copilot): mark internal background notifications as agent-initiated
2026-02-19 13:17:02 +02:00
YeonGyu-Kim
bd2e23584b
docs: update AGENTS.md metadata
...
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-19 10:46:40 +09:00
YeonGyu-Kim
096db59399
fix(run): inherit main-session tool permissions for continuation prompts
2026-02-18 21:10:21 +09:00
YeonGyu-Kim
96ff1e00cc
chore: upgrade claude-sonnet-4-5 to claude-sonnet-4-6 across codebase
2026-02-18 15:51:24 +09:00
YeonGyu-Kim
3313ec3e4f
chore: regenerate AGENTS.md knowledge base
...
🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode ) assistance
2026-02-18 01:26:19 +09:00
YeonGyu-Kim
1fb6a7cc80
refactor: remove 16 orphaned files from background-agent
2026-02-17 14:08:38 +09:00
YeonGyu-Kim
0265fa6990
refactor: remove 3 orphaned files from background-agent/spawner
2026-02-17 14:08:12 +09:00