Commit Graph
6987 Commits
Author SHA1 Message Date
DarkPhilosophy 760682b11f fix(advisor): address review — quota requeue, legacy slug, discoverAdvisorConfigs enabled
- Quota-paused advisor retains the failed batch in pending queue (not dropped),
  releases catchup waiters so the primary agent isn't blocked, and replays the
  turn after the quota cooldown resets
- Legacy no-model advisor status now tracked via slug 'default' instead of ''
  so #advisorStatuses covers all configurations
- discoverAdvisorConfigs() now preserves the enabled field from WATCHDOG.yml
  (was silently dropped during YAML discovery)
- Test error message fixed to match isQuotaError regex (rate limit with space)
2026-07-08 17:42:51 +03:00
DarkPhilosophy 3e92c6d95b fix(advisor): address review — ES private fields, restore instructions body, legacy slug 2026-07-08 17:19:22 +03:00
DarkPhilosophy 2c6b1b1428 Merge remote-tracking branch 'can1357/main' into feat/advisor-per-agent-toggle 2026-07-08 17:10:07 +03:00
DarkPhilosophy b55e6b91fe fix(advisor): show all quota windows (5h + 7d) sorted by urgency 2026-07-08 17:09:44 +03:00
DarkPhilosophy 13572f308b feat(advisor): real quota display in status + config, scrollbar in editor 2026-07-08 16:46:07 +03:00
DarkPhilosophy ceae7f34fd feat(advisor): scrollbar in instructions editor, quota/cost in config preview, merge upstream credential-blocking 2026-07-08 16:21:32 +03:00
DarkPhilosophy fc0d35495f feat(advisor): scrollable instructions editor + richer /advisor status 2026-07-08 15:41:35 +03:00
DarkPhilosophy a33928ee04 feat(advisor): wire per-advisor toggle into config overlay
- Add 'Enabled' toggle field to detail editor (● on / ○ off)
- Show ●/○ markers in roster list for enabled/disabled advisors
- Show enabled status in advisor preview panel
- Add overlay test verifying disabled advisors render with ○ marker
2026-07-08 15:17:53 +03:00
DarkPhilosophy 7f0e198990 feat(advisor): per-advisor toggle, quota classification, status dots
- Add 'enabled' field to AdvisorConfig (default true, persisted in WATCHDOG.yml)
- Filter disabled advisors in #resolveAdvisorRuntimeDescriptors, keep in status map
- Classify quota/rate-limit errors separately from transient server errors
- Auto-pause advisor on quota exhaustion, auto-resume after 5min cooldown
- Add AdvisorRuntimeStatus enum (running/paused/no_model/quota_exhausted/error)
- Render per-advisor status dots in status line: ●○✕ with truncation to 4+ '+'
- Include disabled/no-model advisors in PerAdvisorStat with status field
- Add notifyQuotaExhausted host callback distinct from notifyFailure
- Tests: config round-trip for enabled field, quota classification, overloaded path
2026-07-08 15:17:40 +03:00
can1357 cd7feac260 feat(coding-agent/advisor): implemented advisor credential blocking on usage limits
- Added `onTurnError` hook to `AdvisorRuntime` to handle failed turns before retries.
- Integrated credential blocking in `AgentSession` to prevent retrying usage-limited accounts when advisor turns fail.
- Included account key in `codex-auto-reset` debug logs to improve skip reason visibility.
2026-07-08 13:47:39 +02:00
Brit 298908fc46 perf(coding-agent): memoize non-message token totals
computeNonMessageTokens / computeNonMessageBreakdown re-tokenize the system
prompt and every tool's wire schema (per-tool JSON.stringify) on each call,
but the per-turn compaction and context-threshold paths call them several
times (getContextBreakdown twice, #estimateStoredContextTokens once) over
inputs that change at most once per turn. Memoize on the identity of
(systemPrompt, tools, skills) -- the same stable refs the StatusLineComponent
cache already trusts -- so the expensive parts run at most once per input
change instead of per call.
2026-07-07 11:10:52 +02:00
can1357 c0fa625e0d Merge remote-tracking branch 'origin/farm/fb68fabe/detect-local-vision-model' 2026-07-06 17:40:08 +02:00
can1357 e28256bbb6 Merge remote-tracking branch 'origin/farm/f6f543ea/avoid-os-cpus-startup' 2026-07-06 17:39:09 +02:00
can1357 04783381b4 feat(coding-agent): transitioned session title generation to xml markers
- Replaced tool-based `set_title` invocation with XML-style `<title>` marker tags for session title discovery.
- Implemented robust JSON-unwrapping logic to handle and sanitize title generation outputs.
- Updated model registry in catalog with new model support, provider prefixes, and metadata adjustments.
- Synchronized system prompt documentation and test suites to reflect the new marker-based generation flow.
2026-07-06 17:38:00 +02:00
roboomp 90aabbac9c fix(coding-agent): detected llama.cpp model vision metadata
- Honored per-model architecture.input_modalities from llama.cpp /v1/models during discovery and selected model refresh.
- Added regression coverage for full refresh and cached selected-model metadata refresh.
- Updated the coding-agent changelog.

Fixes #4719
2026-07-06 14:25:59 +00:00
roboomp 0de57eb75e fix(cli): avoided os cpus during startup
Read the Linux CPU model from /proc/cpuinfo during system prompt construction instead of calling os.cpus(), which can synchronously probe every logical CPU frequency file on many-core hosts.

Fixes #4712
2026-07-06 13:50:30 +00:00
can1357 4f172fb27c feat(tui): relocated terminal restore registration to tui init
- Moved emergency terminal restore registration to the TUI terminal initialization logic.
- Ensured terminal restoration triggers correctly on fatal exits by moving registration out of a side-effect-heavy barrel module.
- Added a registration guard to prevent redundant postmortem handler attachments.
2026-07-06 08:07:24 +02:00
can1357 dd5c329bc3 fix(coding-agent): resolved browser teardown crashes by tracking expected abort errors
- Added `markHandled` helper to prevent unhandled promise rejections in fire-and-forget browser tasks.
- Integrated `postmortem.markExpectedCleanupError` to distinguish between expected teardown aborts and actual runtime failures.
- Updated `runCmuxCode` and `WorkerCore` to propagate abort reasons via `ToolAbortError` cause chains.
- Modified `tab-protocol` and supervisor logic to signal expected cleanup states during tab release.
- Added test coverage for `ToolAbortError` wrapping and cause preservation.
2026-07-06 08:07:24 +02:00
can1357 45d95e7bf9 feat(coding-agent): constrained nested task rendering to prevent overflow
- Capped nested subagent trees at the per-level limit to prevent unbounded progress rendering in deep sessions.
- Added elision indicators for collapsed nested subagent rows, prioritizing failed tasks during selection.
- Removed the partial-result spinner repaint loop to reduce CPU usage during high-frequency progress streaming.
2026-07-06 08:07:24 +02:00
can1357 af985eb511 Merge remote-tracking branch 'origin/farm/12bd9282/local-model-vision-detection' 2026-07-06 07:39:11 +02:00
can1357 ccf8789693 Merge remote-tracking branch 'origin/farm/f45f9d5d/get-session-stats-context-usage' 2026-07-06 07:39:07 +02:00
can1357 7adfe9f1a8 Merge remote-tracking branch 'origin/farm/0df0bbf3/fix-skill-card-header-spacing' 2026-07-06 07:38:46 +02:00
can1357 f572841c60 Merge remote-tracking branch 'origin/farm/4a9a5787/fix-irc-between-wait-replies' 2026-07-06 07:38:42 +02:00
can1357 dbc4e9c7c0 Merge remote-tracking branch 'origin/farm/ae58e93f/reset-irc-wake-yield-flag' 2026-07-06 07:38:27 +02:00
can1357 00e96db590 feat(coding-agent): throttled and constrained agent hud updates
- Added throttling and debouncing to HUD data rendering and observer UI synchronization to coalesce update bursts.
- Constrained the subagent HUD display to a maximum of 8 rows with a truncation notice for hidden sessions.
- Enhanced the session observer registry to categorize update types, enabling more granular UI reconciliation.
- Verified render coalescing and display truncation behavior with comprehensive integration tests using fake timers.
2026-07-06 07:38:08 +02:00
roboomp 17080bef3c fix(agent): refreshed startup llama.cpp vision metadata
Refresh cached llama.cpp runtime metadata before exposing the initial session model so local vision defaults are not treated as text-only.

Fixes #4670
2026-07-06 04:03:00 +00:00
roboomp 5f44151903 fix(rpc): included context usage in session stats
Added contextUsage to SessionStats so get_session_stats mirrors the existing getContextUsage data used by state responses.

Fixes #4668
2026-07-06 03:16:13 +00:00
roboomp 4a65d2443d fix(tui): corrected skill card header spacing
Fixed skill card headers to render one visible space between the skill tag and skill name.

Fixes #4662
2026-07-06 02:37:50 +00:00
roboomp 06f6762103 fix(agent): surfaced pending irc replies to wait
Drained pending IRC asides before parking irc wait so replies that arrive between wait calls are returned instead of being treated only as queued interrupts.

Added regression coverage for the already-aborted queued-IRC signal path and documented the fix in the coding-agent changelog.

Fixes #4657
2026-07-06 02:36:35 +00:00
roboomp 3a962c54c7 fix(agent): reset IRC wake maintenance state
Reset per-turn maintenance counters before IRC wake prompts so yielded subagents do not carry stale yield termination into later wake turns.

Add regression coverage for empty-stop retry after an IRC wake following a yielded run.

Fixes #4658
2026-07-06 02:34:23 +00:00
can1357 617966c193 chore: update changelogs 2026-07-06 04:17:21 +02:00
can1357 6e95ace3a7 Merge remote-tracking branch 'origin/farm/8b99fd4b/enabled-skill-provider-fallback' 2026-07-06 04:16:54 +02:00
can1357 f75b9514f1 Merge remote-tracking branch 'origin/farm/21632629/fix-split-commit-lock-file-validation' 2026-07-06 04:16:21 +02:00
can1357 9be287516f Merge remote-tracking branch 'origin/farm/91f334f7/detect-local-vision-model' 2026-07-06 04:16:06 +02:00
can1357 79ca069d9c feat(coding-agent): supported streaming TTS for long text inputs
- Implemented streaming synthesis in the `say` command to allow processing of arbitrarily long text without hitting model phoneme limits.
- Added file input support via the `--file` flag and updated the CLI to prevent conflicting arguments.
- Refined `SpeakableStream` segmentation logic to prioritize valid sentence and clause breaks within the maximum segment length when processing large text buffers.
- Added comprehensive tests for stream segmentation behavior under long-form input.
2026-07-06 04:12:39 +02:00
roboomp 306bde3b7e fix(coding-agent): refreshed llama vision input metadata
- Propagated llama.cpp /props input modalities through selected-model runtime refresh.
- Added a regression test for cached text-only local vision models becoming image-capable after refresh.
- Updated the coding-agent changelog for the local vision detection fix.

Fixes #4654
2026-07-06 02:00:20 +00:00
roboomp 914dc9551a fix(coding-agent): kept claude home skills user-scoped
Skipped the home directory during Claude project skill walk-up so disabling Claude user skills cannot reload the same files as project skills.

Added regression coverage for the home-skill duplicate path with an enabled agents fallback.

Fixes #4648
2026-07-06 01:06:48 +00:00
roboomp dd3375981f fix(coding-agent): preserved enabled duplicate skills
Applied source toggles before skill-name dedup so disabled higher-priority providers no longer hide enabled lower-priority authored skills.

Added regression coverage for disabled claude versus enabled agents duplicate names and managed dead-last behavior.

Fixes #4648
2026-07-06 00:51:24 +00:00
roboomp d5d849f48c fix(commit): capture split-executor staged diff with binary contents
Without --binary, `git diff --cached` writes `Binary files ... differ` stubs
for staged binary files. runSplitCommit reset the index and then fed those
stubs to `git apply --cached --binary`, which cannot reconstruct the content,
so a split plan that included `bun.lockb` (or any other staged binary) would
crash the apply step after the reset had already cleared the index.

Pass `binary: true` when capturing `stagedDiff` so the patch text carries the
real binary payload and the executor can re-stage it per commit group.

Refs #4632, #4634 review
2026-07-05 21:32:40 +00:00
roboomp 7945c1e8eb fix(commit): pair staged lock files with the split-plan commit that owns them
git_overview hides EXCLUDED_LOCK_FILES from the model so lock files never drive
split decisions, but runSplitCommit then re-fetched the raw staged set and
rejected any plan that failed to enumerate them, aborting `omp commit` with
"Split commit plan missing staged files: <lockfile>". Skipping the validator
would have masked a real drop — the executor resets the index and only
re-stages files listed in each commit group.

Introduce packages/coding-agent/src/commit/agentic/lock-files.ts with a
LOCK_FILE_MANIFESTS map and an assignLockFilesToPlan helper that attaches each
orphaned lock file to (1) the commit group touching a sibling manifest in the
same directory, (2) any commit group touching a matching manifest, or (3) the
last commit group. git-overview.ts imports EXCLUDED_LOCK_FILES from the shared
module so the filter and the pairing table stay in sync.

Fixes #4632
2026-07-05 21:21:41 +00:00
can1357 3458b037ae chore: update tests 2026-07-05 16:53:07 +02:00
can1357 8519286ef7 feat(coding-agent): implemented watchdog and abort logic for lsp notifications
- Implemented a 2-second timeout for `workspace/didChangeWatchedFiles` notifications to prevent agent stalls during server congestion.
- Updated `runLspWritethrough` to gracefully reset notification state when the internal watchdog triggers but the primary operation remains active.
- Added explicit abort signal checks in `acp-bridge` to prevent initiation of file writes after tool cancellation.
- Refactored `notifyWorkspaceWatchedFiles` to use `AbortSignal.any` for unified signaling across timeout and caller-provided triggers.
2026-07-05 15:57:24 +02:00
can1357 da705d76e6 feat(coding-agent): unified resolution logic for deferred model patterns
- Enabled comma-separated string splitting within array-based model patterns.
- Expanded deferred model patterns before registration to align with immediate resolution behavior.
- Unified resolution logic to ensure deferred patterns support the same role aliases and chaining as the standard path.
2026-07-05 15:57:24 +02:00
can1357 b3c661f164 Merge PR #4272: perf(session): cache persisted-message keys, invalidate on branch change (@metaphorics) 2026-07-05 13:39:11 +02:00
can1357 e4f05ae182 Merge PR #4266: fix(config): cache failed !command resolutions, bound dynamic fetch timeout (@metaphorics) 2026-07-05 13:39:10 +02:00
can1357 f3e372e7bf fix(tui): preserve agent hub persisted gating 2026-07-05 13:39:10 +02:00
can1357 507e0fae4d Merge PR #4268: perf(tui): load persisted subagents asynchronously (@metaphorics) 2026-07-05 13:39:10 +02:00
can1357 1db9277346 Merge PR #4267: perf(tui): memoize copy-selector preview highlight across renders (@metaphorics) 2026-07-05 13:39:09 +02:00
can1357 64eab4e1c6 Merge PR #4273: fix(eval): surface unexpected JS eval worker exit via close listener (@metaphorics) 2026-07-05 13:39:09 +02:00
can1357 336e1529dc Merge PR #4271: fix(task): abort underlying MCP call when proxy tool timeout fires (@metaphorics) 2026-07-05 13:39:09 +02:00