Skip to content

feat(telemetry): Phase 3 — qwen-code.subagent span with concurrent isolation (#3731)#4410

Merged
doudouOUC merged 17 commits into
mainfrom
feat/telemetry-phase-3-subagent-spans
Jun 5, 2026
Merged

feat(telemetry): Phase 3 — qwen-code.subagent span with concurrent isolation (#3731)#4410
doudouOUC merged 17 commits into
mainfrom
feat/telemetry-phase-3-subagent-spans

Conversation

@doudouOUC

Copy link
Copy Markdown
Collaborator

Closes Phase 3 of #3731.

Summary

Adds a qwen-code.subagent span around every subagent invocation. The LLM/tool/hook spans the subagent emits become a proper subtree, instead of interleaving with concurrent siblings under the parent interaction span.

Trace tree change

Before: 3 concurrent AGENT tool calls produced 3 qwen-code.tool [agent] siblings whose LLM/tool children all attached to the shared parent interaction — operators couldn't tell which API call belonged to which subagent.

After:

qwen-code.interaction                    [traceId=T0]
├─ qwen-code.tool [agent #A]
│  └─ qwen-code.subagent (A)             [child, T0]
│     ├─ qwen-code.llm_request
│     └─ qwen-code.tool [read_file]
├─ qwen-code.tool [agent #B]
│  └─ qwen-code.subagent (B)             [child, T0]
└─ qwen-code.tool [agent #C, fork]
   └─ qwen-code.subagent (C, fork)       [LINKED ROOT, T1]
      └─ ...                              [T1, may emit hours later]

Design

Full doc: docs/design/telemetry-subagent-spans-design.md (504 lines, 6 explicit decisions each with options + tradeoffs + rationale).

Six decisions (all justified against OTel spec, opencode, claude-code precedent):

  1. Split lifecycle: caller (agent.ts) creates the span, body runs inside runInSubagentSpanContext(span, fn) via context.with. Required for fork/background — by the time fire-and-forget body fires, caller's context.active() is already gone.
  2. Hybrid traceId: foreground = child span (inherits T0); fork/background = linked root span (new T1 + OTel Link back to invoker). Spec-recommended pattern for 'long running asynchronous data processing operations'. Avoids inflating parent trace duration with hour-long forks.
  3. Type-aware TTL: 30-min stays for blocked_on_user + foreground subagents; fork/background get 4h via ttlFor(ctx). Swept spans stamped qwen-code.subagent.status='aborted' + terminate_reason='ttl_swept'.
  4. LogRecord retention: qwen-code.subagent_execution LogRecord kept (RUM + metrics depend on it), but LogToSpanProcessor skips bridging that single event name. No duplicate spans.
  5. OTel GenAI semantic conventions: dual-emit gen_ai.agent.id + qwen-code.subagent.id, gen_ai.agent.name + qwen-code.subagent.name, plus gen_ai.operation.name='invoke_agent', gen_ai.provider.name, gen_ai.conversation.id. Errors use OTel-standard exception.message + error.type. Spec is in Development — dual-emit lets dashboards transition when stable.
  6. AgentContext.depth: auto-incremented inside runWithAgentContext, callers pass nothing. Surfaces as qwen-code.subagent.depth for recursion-bug detection.

What dashboards see

  • New span name qwen-code.subagent appears between qwen-code.tool [agent] and the subagent's LLM/tool children.
  • qwen-code.subagent_execution bridge span no longer emitted (LogRecord still flows to RUM + metrics).
  • Fork/background subagents appear in separate traces, linked from the invoker via OTel Link.

Files

File Change
docs/design/telemetry-subagent-spans-design.md Full design doc
constants.ts SPAN_SUBAGENT constant
session-tracing.ts startSubagentSpan/endSubagentSpan/runInSubagentSpanContext + types; SpanType += 'subagent'; type-aware TTL via ttlFor(ctx)
log-to-span-processor.ts Skip-list for EVENT_SUBAGENT_EXECUTION
telemetry/index.ts Re-export new helpers + types
agent-context.ts depth field (auto-incremented) + getCurrentAgentDepth()
tools/agent/agent.ts runWithSubagentSpan() helper centralizes the pattern; wired into 3 invocation paths

Test plan

194/194 across affected files (was 173 → +21 new):

  • session-tracing.test.ts (+14): foreground/fork/background span creation, Link with invoker context, dual-emit attrs, depth/parentAgentId, status mapping (completed/failed/cancelled/aborted), idempotent end, NOOP-when-SDK-uninitialized, truncateSpanError integration on error message, type-aware TTL behavior (fork survives 30min, swept at 4h; foreground swept at 30min)

  • log-to-span-processor.test.ts (+2): skip works for subagent_execution; non-listed events still bridge

  • agent-context.test.ts (+5): depth=0 top-level, auto-increment per nesting, sibling isolation, caller-invisible

  • agent.test.ts (existing 75 unchanged): proves wiring is NOOP-safe under uninit'd SDK

  • tsc --noEmit clean

  • ESLint clean on changed files (auto-fixed import order in log-to-span-processor.ts)

Out-of-scope (deferred follow-ups)

  • Token usage aggregation per subagent (gen_ai.usage.*) → Phase 4
  • Migrating the qwen-code.subagent_execution LogRecord onto span events → needs 3-system coordination (RUM + metrics + bridge)
  • Removing dual-emit of gen_ai.agent.id/name → when GenAI spec reaches Stable

Rollback

Single PR, single commit. Revert restores prior behavior 1:1. The new span helpers are only invoked from agent.ts; dropping the wiring + the LogToSpanProcessor skip restores the original LogRecord bridge behavior.

🤖 Generated with Qwen Code

Copilot AI review requested due to automatic review settings May 21, 2026 16:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements Phase 3 of hierarchical session tracing by introducing a dedicated qwen-code.subagent span around each subagent invocation, so LLM/tool/hook spans emitted by concurrent subagents become isolated subtrees rather than interleaving under the parent interaction/tool spans. It also updates TTL sweeping behavior to support long-lived fork/background subagents, and avoids duplicate span creation by skipping the existing qwen-code.subagent_execution LogRecord → span bridge.

Changes:

  • Add qwen-code.subagent span lifecycle helpers (start/end + context binding) and wire them into foreground/fork/background subagent execution paths.
  • Make TTL sweeping type-aware so fork/background subagent spans use a longer TTL window and are stamped with subagent-specific abort metadata on sweep.
  • Skip bridging qwen-code.subagent_execution LogRecords into spans to prevent duplicate/competing span representations.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
docs/design/telemetry-subagent-spans-design.md Design doc describing subagent-span hierarchy, trace/link strategy, and TTL rationale.
packages/core/src/telemetry/constants.ts Adds SPAN_SUBAGENT constant for the new span name.
packages/core/src/telemetry/session-tracing.ts Implements subagent span helpers and introduces type-aware TTL sweeping.
packages/core/src/telemetry/session-tracing.test.ts Adds unit tests for subagent span behavior (child vs linked-root, links, TTL, status mapping).
packages/core/src/telemetry/log-to-span-processor.ts Adds a skip-list so subagent_execution events are not bridged to spans.
packages/core/src/telemetry/log-to-span-processor.test.ts Tests that the skip-list suppresses bridging only for subagent_execution.
packages/core/src/telemetry/index.ts Re-exports new subagent telemetry helpers and types.
packages/core/src/agents/runtime/agent-context.ts Adds ALS-derived depth tracking and getCurrentAgentDepth() for telemetry.
packages/core/src/agents/runtime/agent-context.test.ts Tests depth behavior across nesting and sibling frames.
packages/core/src/tools/agent/agent.ts Wraps subagent invocation bodies in the new subagent span context across all invocation kinds.
Comments suppressed due to low confidence (2)

packages/core/src/telemetry/log-to-span-processor.ts:41

  • There is an import statement after the BRIDGE_SKIP_EVENT_NAMES constant declaration. ES modules/TypeScript require all imports to come before any executable statements, so this will fail to parse/compile. Move BRIDGE_SKIP_EVENT_NAMES (and its comment) below the import section, or convert the later import into a dynamic await import() if it must remain after code (prefer moving the const).
const BRIDGE_SKIP_EVENT_NAMES = new Set<string>([EVENT_SUBAGENT_EXECUTION]);
import {
  deriveTraceId,
  randomHexString,
  randomSpanId,

docs/design/telemetry-subagent-spans-design.md:431

  • This table row points to packages/core/src/subagents/agent-context.ts, but the implementation in this PR modifies packages/core/src/agents/runtime/agent-context.ts. Updating the file path here will keep the design doc consistent with the actual code layout.
| `packages/core/src/telemetry/log-to-span-processor.ts`      | Skip-list to bypass bridging `qwen-code.subagent_execution`                                                                                                                                   | +6      |
| `packages/core/src/telemetry/index.ts`                      | Re-export new helpers + types                                                                                                                                                                 | +6      |
| `packages/core/src/subagents/agent-context.ts`              | Add `depth?: number` to `AgentContext` + `getCurrentAgentDepth()` accessor                                                                                                                    | +12     |
| `packages/core/src/tools/agent/agent.ts`                    | Wrap 3 execution paths (foreground/fork/background) in `runInSubagentSpanContext` with try/catch/finally                                                                                      | +60     |

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/design/telemetry-subagent-spans-design.md Outdated
@github-actions

Copy link
Copy Markdown
Contributor

📋 Review Summary

This PR implements Phase 3 of hierarchical session tracing (#3731), adding qwen-code.subagent spans to isolate subagent invocations in the trace tree. The implementation is well-designed with comprehensive documentation, extensive test coverage (+21 tests), and careful adherence to OTel GenAI semantic conventions. The design correctly handles the three invocation patterns (foreground, fork, background) with appropriate trace context propagation strategies.

🔍 General Feedback

Positive aspects:

  • Exceptional design documentation (524 lines) with 6 explicit decisions, each with options, tradeoffs, and rationale
  • Comprehensive test coverage across all critical paths (foreground/fork/background, nesting, TTL, error handling)
  • Proper OTel spec compliance with dual-emit strategy for forward compatibility (gen_ai.* + qwen-code.* attributes)
  • Clean separation of concerns: span lifecycle helpers in session-tracing.ts, wiring in agent.ts, skip-list in log-to-span-processor.ts
  • Thoughtful handling of edge cases: recursive depth tracking, TTL-aware span cleanup, idempotent span ending, NOOP_SPAN discipline

Architectural decisions:

  • Split lifecycle pattern (caller creates span, body runs in runInSubagentSpanContext) is correct for fork/background paths
  • Linked-root spans for fire-and-forget subagents follows OTel spec recommendations for long-running async operations
  • Type-aware TTL (30min foreground, 4h fork/background) balances resource cleanup with execution time variability
  • Keeping qwen-code.subagent_execution LogRecord while skipping span bridge preserves RUM/metrics compatibility

Potential concerns:

  • Large PR (~430 LOC across 9 files) - though justified by cohesive telemetry surface
  • Sampling divergence risk for fork/background subagents noted but deferred
  • Log-bridge spans inside forks use session-derived traceId vs native spans' new T1 (acknowledged as open question)

🎯 Specific Feedback

🟢 Medium

  1. File: packages/core/src/telemetry/session-tracing.ts:940-945 - The TTL attribute stamping error handling could be clearer about whether span.end() still executes:
try {
  ctx.span.setAttributes({ ... });
} catch (error) {
  debugLogger.warn(`Failed to stamp TTL attrs...`);
}
// Consider: should span.end() be skipped if attribute stamping fails?
// Currently continues to end() regardless, which is correct but worth documenting

Suggestion: Add a comment clarifying that span.end() proceeds even if attribute stamping fails, since ending the span is more important than perfect attribution.

  1. File: packages/core/src/tools/agent/agent.ts:1188-1195 - The runWithSubagentSpan helper captures parentAgentId and depth before entering the child's runWithAgentContext frame, which is correct. However, this ordering dependency is subtle:
parentAgentId: getCurrentAgentId() ?? undefined,
depth: getCurrentAgentDepth(),
// ...
() => runInSubagentSpanContext(span, body)

Suggestion: Add an inline comment explicitly stating "Captured BEFORE child's runWithAgentContext frame to record caller's depth, not callee's" to prevent future refactors from accidentally moving these captures.

  1. File: packages/core/src/telemetry/constants.ts - Missing SPAN_SUBAGENT export constant. The design doc mentions span name qwen-code.subagent, and session-tracing.ts imports it, but I don't see it defined in constants.ts in the diff.
    Suggestion: Add export const SPAN_SUBAGENT = 'qwen-code.subagent'; to maintain consistency with other span name constants.

🔵 Low

  1. File: packages/core/src/telemetry/session-tracing.ts:960 - The SubagentInvocationKind type includes 'foreground' | 'fork' | 'background', but the OTel spec reference URL in the JSDoc is incomplete:
* (`https://opentelemetry.io/docs/specs/otel/overview/#links-between-spans`).

Suggestion: Complete the URL (missing https:// prefix in the actual link target).

  1. File: packages/core/src/telemetry/session-tracing.ts:1008 - The comment mentions "Mirrors opencode's withRunSpan pattern" - consider adding a link to the opencode reference for future maintainers.

  2. File: packages/core/src/tools/agent/agent.ts:1213 - Default terminate reason "subagent body did not reach a terminal state" is quite long and may bloat span attributes. Consider shortening to "body_no_terminal_state" or similar.

  3. File: docs/design/telemetry-subagent-spans-design.md:476 - The test plan table mentions agent.test.ts end-to-end tests, but the changed files list shows only telemetry test files. Confirm the e2e tests exist in packages/core/src/tools/agent/agent.test.ts or update the design doc.

  4. File: packages/core/src/agents/runtime/agent-context.ts - The depth field is mentioned in the diff summary but I don't see it in the file contents. Verify the AgentContext interface includes depth?: number and getCurrentAgentDepth() is exported.

  5. File: packages/core/src/telemetry/log-to-span-processor.ts - The skip-list for EVENT_SUBAGENT_EXECUTION should have a comment referencing the design doc decision Are you interested in AI Terminal? #4 for future maintainers who wonder why this specific event is skipped.

✅ Highlights

  • Design doc quality: The 524-line design document is exemplary - each of the 6 decisions includes options considered, tradeoffs analyzed, and explicit rationale. This is a model for future complex telemetry changes.

  • OTel spec alignment: Dual-emit strategy (gen_ai.* + qwen-code.*) shows forward-thinking design that will ease migration when OTel GenAI specs stabilize.

  • Test coverage breadth: 194 tests across affected files, with specific coverage of:

    • Foreground vs fork vs background span creation
    • OTel Link navigation for cross-trace correlation
    • Depth tracking for recursive subagent detection
    • Type-aware TTL behavior
    • Idempotent span ending
    • NOOP_SPAN behavior when SDK uninitialized
  • Error handling discipline: Consistent try/catch around span attribute updates and span.end() calls prevents telemetry errors from affecting core functionality.

  • Backward compatibility: Keeping the LogRecord intact while only skipping the span bridge shows careful consideration of downstream RUM/metrics consumers.

🔧 Pre-Merge Checklist

  • Verify SPAN_SUBAGENT constant is exported from constants.ts
  • Confirm AgentContext.depth field and getCurrentAgentDepth() are implemented
  • Run npm run build && npm run typecheck to verify TypeScript compilation
  • Run tests: cd packages/core && npx vitest run src/telemetry/session-tracing.test.ts src/telemetry/log-to-span-processor.test.ts src/agents/runtime/agent-context.test.ts
  • Verify the e2e agent tests mentioned in design doc exist and pass

@github-actions

github-actions Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 77.64% 77.64% 80.65% 80.19%
Core 81.21% 81.21% 83.11% 83.4%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   77.64 |    80.19 |   80.65 |   77.64 |                   
 src               |   74.39 |    68.46 |   76.74 |   74.39 |                   
  gemini.tsx       |   62.93 |    64.28 |   71.42 |   62.93 | ...1160-1163,1175 
  ...ractiveCli.ts |   78.61 |    66.66 |      75 |   78.61 | ...1299-1300,1336 
  ...liCommands.ts |   84.59 |    77.14 |     100 |   84.59 | ...26-335,361,476 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   65.32 |    65.74 |   85.24 |   65.32 |                   
  acpAgent.ts      |   65.05 |    65.95 |   85.96 |   65.05 | ...2076,2090-2098 
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  errorCodes.ts    |       0 |        0 |       0 |       0 | 1-22              
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
 ...ration/service |   68.65 |    83.33 |   66.66 |   68.65 |                   
  filesystem.ts    |   68.65 |    83.33 |   66.66 |   68.65 | ...32,77-94,97-98 
 ...ration/session |   77.24 |    71.87 |   86.58 |   77.24 |                   
  ...ryReplayer.ts |   67.34 |     75.6 |   81.81 |   67.34 | ...54-269,282-283 
  Session.ts       |   76.71 |    70.61 |   88.88 |   76.71 | ...2717,2723-2726 
  ...entTracker.ts |   90.85 |    84.84 |      90 |   90.85 | ...35,199,251-260 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   84.21 |    77.77 |     100 |   84.21 | ...37-153,209-211 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ssion/emitters |   96.01 |    90.75 |    92.3 |   96.01 |                   
  BaseEmitter.ts   |   76.92 |    66.66 |      80 |   76.92 | 23-24,39-40,55-56 
  ...ageEmitter.ts |     100 |    89.47 |     100 |     100 | 109,111           
  PlanEmitter.ts   |     100 |      100 |     100 |     100 |                   
  ...allEmitter.ts |   98.06 |     92.3 |     100 |   98.06 | 227-228,327,335   
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
 ...ession/rewrite |   90.36 |    87.83 |   94.11 |   90.36 |                   
  LlmRewriter.ts   |      81 |       84 |     100 |      81 | ...,88-89,155-159 
  ...Middleware.ts |   95.83 |    85.71 |     100 |   95.83 | 119,127-129       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/commands      |   45.67 |    85.71 |   43.47 |   45.67 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   56.66 |      100 |       0 |   56.66 | 15-19,27-34       
  extensions.tsx   |   96.55 |      100 |      50 |   96.55 | 37                
  hooks.tsx        |   66.66 |      100 |       0 |   66.66 | 20-24             
  mcp.ts           |   94.73 |      100 |      50 |   94.73 | 28                
  review.ts        |   51.85 |      100 |       0 |   51.85 | 24-35,38          
  serve.ts         |    8.02 |      100 |       0 |    8.02 | ...56-152,154-266 
 ...mmands/channel |    39.2 |    79.45 |      50 |    39.2 |                   
  ...l-registry.ts |    8.33 |      100 |       0 |    8.33 | 6-22,25-43        
  config-utils.ts  |      92 |      100 |   66.66 |      92 | 21-26             
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  pairing.ts       |   26.31 |      100 |       0 |   26.31 | ...30,40-50,52-65 
  pidfile.ts       |   96.34 |    86.95 |     100 |   96.34 | 49,59,91          
  start.ts         |   30.98 |       52 |   69.23 |   30.98 | ...72-475,484-486 
  status.ts        |   17.85 |      100 |       0 |   17.85 | 15-26,32-76       
  stop.ts          |      20 |      100 |       0 |      20 | 14-48             
 ...nds/extensions |   84.89 |    88.52 |   81.81 |   84.89 |                   
  consent.ts       |   71.65 |    89.28 |   42.85 |   71.65 | ...85-141,156-162 
  disable.ts       |     100 |      100 |     100 |     100 |                   
  enable.ts        |     100 |      100 |     100 |     100 |                   
  install.ts       |    75.6 |    66.66 |   66.66 |    75.6 | ...39-142,145-153 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |      100 |     100 |     100 |                   
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   99.15 |      100 |   83.33 |   99.15 | 151               
  uninstall.ts     |    37.5 |      100 |   33.33 |    37.5 | 23-45,57-64,67-70 
  update.ts        |   96.32 |      100 |     100 |   96.32 | 101-105           
  utils.ts         |   65.06 |    31.25 |     100 |   65.06 | ...85,87-91,93-97 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 src/commands/mcp  |   92.29 |    86.08 |   88.88 |   92.29 |                   
  add.ts           |     100 |    98.03 |     100 |     100 | 293               
  list.ts          |   91.22 |    80.76 |      80 |   91.22 | ...19-121,146-147 
  reconnect.ts     |   76.72 |    71.42 |   85.71 |   76.72 | 35-48,153-175     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   11.57 |      100 |       0 |   11.57 |                   
  cleanup.ts       |   17.94 |      100 |       0 |   17.94 | ...01-106,108-109 
  deterministic.ts |   13.75 |      100 |       0 |   13.75 | ...22-738,740-741 
  fetch-pr.ts      |   11.36 |      100 |       0 |   11.36 | ...80-201,203-204 
  load-rules.ts    |   11.32 |      100 |       0 |   11.32 | ...41-153,155-156 
  pr-context.ts    |    6.22 |      100 |       0 |    6.22 | ...97-312,314-315 
  presubmit.ts     |    9.35 |      100 |       0 |    9.35 | ...62-287,289-290 
 ...nds/review/lib |      30 |      100 |       0 |      30 |                   
  gh.ts            |   22.58 |      100 |       0 |   22.58 | ...49,53-54,62-69 
  git.ts           |   22.72 |      100 |       0 |   22.72 | 15-18,29-39,43-44 
  paths.ts         |   52.94 |      100 |       0 |   52.94 | ...26,37-38,42-43 
 src/config        |    92.7 |    84.68 |   89.69 |    92.7 |                   
  auth.ts          |   86.74 |    80.88 |     100 |   86.74 | ...40-241,257-258 
  config.ts        |   86.59 |     83.1 |   81.48 |   86.59 | ...1962,1964-1972 
  keyBindings.ts   |   96.87 |       50 |     100 |   96.87 | 201-204           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  ...idersScope.ts |      92 |       90 |     100 |      92 | 11-12             
  sandboxConfig.ts |   61.64 |    71.87 |   66.66 |   61.64 | ...54-68,73,77-89 
  settings.ts      |   86.98 |    88.23 |   89.74 |   86.98 | ...1322,1337-1340 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...tedFolders.ts |   96.22 |       94 |     100 |   96.22 | ...95-197,212-213 
 ...nfig/migration |   94.89 |    78.94 |   83.33 |   94.89 |                   
  index.ts         |   94.87 |    88.88 |     100 |   94.87 | 91-92             
  scheduler.ts     |   96.55 |    77.77 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.74 |       96 |     100 |   94.74 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |    90.19 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   63.09 |    64.51 |   55.55 |   63.09 |                   
  ...tputBridge.ts |   62.94 |    65.51 |   56.25 |   62.94 | ...22-323,331-334 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/i18n          |   81.47 |    75.94 |   65.71 |   81.47 |                   
  index.ts         |   63.68 |    69.56 |   53.84 |   63.68 | ...70-271,281-286 
  languages.ts     |   96.92 |    86.66 |     100 |   96.92 | 134-135,167,184   
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   72.57 |    71.12 |   74.07 |   72.57 |                   
  session.ts       |   76.64 |     69.4 |   85.71 |   76.64 | ...23-824,833-843 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...90-591,594-595 
 ...active/control |   76.79 |    88.23 |      80 |   76.79 |                   
  ...rolContext.ts |    6.89 |        0 |       0 |    6.89 | 50-86             
  ...Dispatcher.ts |   91.66 |    91.83 |   88.88 |   91.66 | ...54-372,388,391 
  ...rolService.ts |       8 |        0 |       0 |       8 | 46-179            
 ...ol/controllers |   27.25 |    35.71 |   36.66 |   27.25 |                   
  ...Controller.ts |   36.97 |       80 |      80 |   36.97 | ...15-117,127-210 
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |    33.7 |    34.48 |   44.44 |    33.7 | ...57-466,481-486 
  ...Controller.ts |   14.06 |      100 |       0 |   14.06 | ...82-117,130-133 
  ...Controller.ts |   21.97 |    28.57 |   27.27 |   21.97 | ...39-451,460-489 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.01 |    93.77 |   95.23 |   98.01 |                   
  ...putAdapter.ts |   97.89 |    92.82 |   98.07 |   97.89 | ...1303,1398-1399 
  ...putAdapter.ts |      96 |     90.9 |   85.71 |      96 | 51-52             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.38 |      100 |   90.47 |   98.38 | 83-84,124-125     
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/remoteInput   |   86.98 |       75 |   85.71 |   86.98 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   88.12 |    76.08 |   91.66 |   88.12 | ...21-222,233-236 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/serve         |   79.44 |    78.92 |   92.93 |   79.44 |                   
  auth.ts          |   88.49 |    88.63 |     100 |   88.49 | ...49-150,153-155 
  capabilities.ts  |     100 |     90.9 |     100 |     100 | 264               
  ...usProvider.ts |   67.01 |    51.42 |     100 |   67.01 | ...40-245,278-286 
  debugMode.ts     |     100 |      100 |     100 |     100 |                   
  demo.ts          |     100 |      100 |     100 |     100 |                   
  envSnapshot.ts   |    92.3 |       84 |     100 |    92.3 | 108-111,170-177   
  eventBus.ts      |     100 |      100 |     100 |     100 |                   
  httpAcpBridge.ts |   79.99 |    79.16 |   96.47 |   79.99 | ...4270,4301-4342 
  ...oryChannel.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-106             
  loopbackBinds.ts |     100 |      100 |     100 |     100 |                   
  runQwenServe.ts  |   73.98 |    87.83 |   55.55 |   73.98 | ...94-710,735-737 
  server.ts        |   86.18 |    82.94 |   90.62 |   86.18 | ...2478,2543-2552 
  status.ts        |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...paceAgents.ts |   64.87 |    70.45 |    90.9 |   64.87 | ...1306,1316-1326 
  ...paceMemory.ts |   87.13 |    78.46 |     100 |   87.13 | ...54-361,421-428 
 src/serve/auth    |   86.54 |    78.75 |   93.75 |   86.54 |                   
  deviceFlow.ts    |   96.33 |    79.51 |    97.5 |   96.33 | ...1526,1630,1700 
  ...owProvider.ts |   45.23 |    74.07 |      75 |   45.23 | ...90-359,375,379 
 src/serve/fs      |   84.85 |    79.75 |     100 |   84.85 |                   
  audit.ts         |     100 |    96.15 |     100 |     100 | 201               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.82 |    77.08 |     100 |   77.82 | ...64,493-497,510 
  policy.ts        |   90.32 |    89.18 |     100 |   90.32 | 142-150           
  ...FileSystem.ts |   83.55 |    76.22 |     100 |   83.55 | ...1859,1886-1887 
 src/serve/routes  |   89.41 |       70 |     100 |   89.41 |                   
  ...ceFileRead.ts |   94.41 |    76.92 |     100 |   94.41 | ...28-329,390-392 
  ...eFileWrite.ts |    82.1 |    60.52 |     100 |    82.1 | ...42-244,247-249 
 src/services      |   91.66 |    91.21 |   97.56 |   91.66 |                   
  ...mandLoader.ts |     100 |    93.75 |     100 |     100 | 92                
  ...killLoader.ts |     100 |    96.15 |     100 |     100 | 47                
  ...andService.ts |    98.7 |      100 |     100 |    98.7 | 107               
  ...mandLoader.ts |   86.83 |    83.87 |     100 |   86.83 | ...30-335,340-345 
  ...omptLoader.ts |   75.84 |    80.64 |   83.33 |   75.84 | ...10-211,277-278 
  ...mandLoader.ts |     100 |      100 |     100 |     100 |                   
  ...nd-factory.ts |   91.42 |    91.66 |     100 |   91.42 | 128,137-144       
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...ndMetadata.ts |   98.21 |    96.66 |     100 |   98.21 | 83,87             
  commandUtils.ts  |      96 |     90.9 |     100 |      96 | 48                
  ...and-parser.ts |   90.69 |    85.71 |     100 |   90.69 | 63-66             
  ...ionService.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |    88.3 |    85.49 |   92.59 |    88.3 |                   
  DataProcessor.ts |   88.22 |    85.48 |      95 |   88.22 | ...1341,1345-1352 
  ...tGenerator.ts |   98.21 |    85.71 |     100 |   98.21 | 46                
  ...teRenderer.ts |   45.45 |      100 |       0 |   45.45 | 13-51             
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.04 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |    84.21 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.65 |     100 |   97.41 | 95-98             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.35 |    84.84 |     100 |   97.35 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |       70 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   66.82 |    78.94 |   66.66 |   66.82 |                   
  ...reeStartup.ts |   66.82 |    78.94 |   66.66 |   66.82 | ...08-312,363-426 
 src/test-utils    |   93.75 |    83.33 |      80 |   93.75 |                   
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   64.71 |    73.17 |   59.67 |   64.71 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   63.54 |    64.74 |      50 |   63.54 | ...3191,3195-3199 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |   29.23 |      100 |       0 |   29.23 | 25-75             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |      60 |      100 |   35.29 |      60 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...inePresets.ts |   98.28 |    89.87 |     100 |   98.28 | ...34,261,420-422 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   59.16 |    65.94 |   51.11 |   59.16 |                   
  AuthDialog.tsx   |   62.87 |     42.1 |   18.18 |   62.87 | ...03,310-332,336 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   60.03 |    70.37 |      56 |   60.03 | ...87,791,800,803 
  useAuth.ts       |   94.55 |    73.52 |     100 |   94.55 | ...19-220,239-245 
  ...rSetupFlow.ts |   43.52 |    33.33 |      50 |   43.52 | ...72-393,410-453 
 src/ui/commands   |   75.24 |    81.22 |   84.17 |   75.24 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |   89.47 |    81.25 |     100 |   89.47 | 92-93,95-100      
  arenaCommand.ts  |   62.81 |    58.73 |   65.21 |   62.81 | ...91-596,681-689 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |    96.1 |    74.07 |     100 |    96.1 | 149-154           
  bugCommand.ts    |   81.13 |    71.42 |     100 |   81.13 | 60-69             
  clearCommand.ts  |      92 |    76.47 |     100 |      92 | 43-44,72-73,91-92 
  ...essCommand.ts |   67.95 |    55.88 |      75 |   67.95 | ...86-187,201-204 
  ...extCommand.ts |   65.06 |    67.24 |   84.61 |   65.06 | ...39-574,585-586 
  copyCommand.ts   |   98.28 |    94.96 |     100 |   98.28 | ...80,280,321,327 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |     87.5 |     100 |     100 | ...61,224-225,238 
  ...ryCommand.tsx |   77.02 |    79.03 |   88.88 |   77.02 | ...65-270,324-332 
  docsCommand.ts   |     100 |    88.88 |     100 |     100 | 25                
  doctorCommand.ts |   60.93 |    87.06 |    87.5 |   60.93 | ...66-367,440-660 
  dreamCommand.ts  |      75 |    66.66 |   66.66 |      75 | 22-27,44-47       
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |   49.33 |     90.9 |   63.63 |   49.33 | ...06-110,163-215 
  forgetCommand.ts |   26.82 |      100 |      50 |   26.82 | 18-51             
  goalCommand.ts   |   91.41 |    84.44 |      90 |   91.41 | ...86-189,201-204 
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.13 |    65.71 |   85.71 |   81.13 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  initCommand.ts   |   84.33 |    72.72 |     100 |   84.33 | 68,82-87,89-94    
  ...ghtCommand.ts |   74.56 |    68.42 |     100 |   74.56 | ...31-245,250-273 
  ...ageCommand.ts |   92.17 |    82.69 |     100 |   92.17 | ...43,164,173-183 
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,101-102        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   75.09 |    78.18 |      75 |   75.09 | ...20-225,262-267 
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  planCommand.ts   |   78.82 |    76.92 |     100 |   78.82 | 30-35,51-56,68-73 
  quitCommand.ts   |     100 |      100 |     100 |     100 |                   
  recapCommand.ts  |   21.81 |      100 |      50 |   21.81 | 24-73             
  ...berCommand.ts |   32.43 |      100 |      50 |   32.43 | 23-57             
  renameCommand.ts |   85.71 |    86.04 |     100 |   85.71 | ...02-209,216-221 
  ...oreCommand.ts |    92.3 |    87.87 |     100 |    92.3 | ...,83-88,129-130 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  rewindCommand.ts |      80 |      100 |      50 |      80 | 19-21             
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   81.43 |    65.21 |      80 |   81.43 | ...70-173,176-179 
  skillsCommand.ts |   36.52 |       50 |      50 |   36.52 | ...98-114,117-144 
  statsCommand.ts  |   88.19 |    84.21 |     100 |   88.19 | ...,58-61,143-146 
  ...ineCommand.ts |     100 |      100 |     100 |     100 |                   
  ...aryCommand.ts |    6.46 |      100 |      50 |    6.46 | 31-329            
  tasksCommand.ts  |   77.22 |    72.13 |     100 |   77.22 | ...46-150,172-177 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  vimCommand.ts    |   54.54 |      100 |      50 |   54.54 | 19-29             
 src/ui/components |   64.06 |    76.75 |    65.4 |   64.06 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   10.56 |      100 |       0 |   10.56 | 39-173            
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   16.27 |      100 |       0 |   16.27 | 19-58             
  ...TextInput.tsx |    83.8 |    76.92 |     100 |    83.8 | ...38,252-254,356 
  Composer.tsx     |    81.6 |     64.7 |     100 |    81.6 | ...90,108,160,173 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  ...ification.tsx |   28.57 |      100 |       0 |   28.57 | 16-36             
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   11.98 |      100 |       0 |   11.98 | 65-508            
  DiffDialog.tsx   |    2.47 |      100 |       0 |    2.47 | 68-732            
  ...ngsDialog.tsx |    8.44 |      100 |       0 |    8.44 | 37-195            
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   77.48 |    54.76 |     100 |   77.48 | ...41,165,186-191 
  ...ngSpinner.tsx |   68.42 |       80 |      50 |   68.42 | 35-52,73,80-81    
  GoalPill.tsx     |   76.19 |    81.81 |     100 |   76.19 | 24-30,46-50       
  Header.tsx       |   98.62 |    94.28 |     100 |   98.62 | 162,164           
  Help.tsx         |   98.32 |       90 |     100 |   98.32 | ...24,381,447-448 
  ...emDisplay.tsx |    61.7 |       36 |     100 |    61.7 | ...42,345,348-354 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   81.38 |     80.2 |   83.33 |   81.38 | ...1601,1625,1676 
  ...Shortcuts.tsx |   20.87 |      100 |       0 |   20.87 | ...6,49-51,67-125 
  ...Indicator.tsx |     100 |    91.42 |     100 |     100 | 65,74             
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   84.54 |    81.15 |   66.66 |   84.54 | ...87-290,347-351 
  MemoryDialog.tsx |   61.87 |    76.05 |    62.5 |   61.87 | ...72,391,428-430 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   85.68 |    69.17 |     100 |   85.68 | ...75-591,648-652 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   18.18 |      100 |       0 |   18.18 | 15-58             
  ...onsDialog.tsx |    2.13 |      100 |       0 |    2.13 | 62-133,148-1004   
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...icePrompt.tsx |   92.64 |    85.71 |     100 |   92.64 | 102-106,134-139   
  PrepareLabel.tsx |   91.66 |    77.27 |     100 |   91.66 | 73-75,77-79,110   
  ...atePrompt.tsx |    8.57 |      100 |       0 |    8.57 | 24-55,58-134      
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |   21.42 |      100 |       0 |   21.42 | 13-39             
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...dSelector.tsx |   41.26 |    61.53 |   71.42 |   41.26 | ...74-472,476-520 
  ...ionPicker.tsx |   83.66 |    72.13 |     100 |   83.66 | ...96,402,444-466 
  ...onPreview.tsx |   92.42 |    84.37 |     100 |   92.42 | ...,70-71,143-145 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   72.56 |       80 |      40 |   72.56 | ...06-109,114-117 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   66.27 |    71.16 |      75 |   66.27 | ...12-820,826-827 
  ...ionDialog.tsx |    87.8 |      100 |   33.33 |    87.8 | 36-39,44-51       
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |      28 |      100 |       0 |      28 | 18-40             
  ...ionPicker.tsx |   17.59 |      100 |       0 |   17.59 | 55-172            
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ineDialog.tsx |    93.5 |    85.18 |     100 |    93.5 | ...05,267,287-289 
  ...yTodoList.tsx |   96.33 |    88.23 |     100 |   96.33 | 137-140           
  ...nsDisplay.tsx |   87.25 |       64 |     100 |   87.25 | ...47-149,156-158 
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    81.81 |     100 |     100 | 71-86             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...ackDialog.tsx |    7.84 |      100 |       0 |    7.84 | 24-134            
  ...xitDialog.tsx |   80.36 |    43.47 |      60 |   80.36 | ...24-238,248-251 
  ...odeVisuals.ts |   91.42 |    64.28 |     100 |   91.42 | 15,21,24          
 ...nts/agent-view |   38.45 |    70.83 |   36.36 |   38.45 |                   
  ...atContent.tsx |    8.79 |      100 |       0 |    8.79 | 53-265,271-273    
  ...tChatView.tsx |   21.05 |      100 |       0 |   21.05 | 21-39             
  ...tComposer.tsx |   10.74 |      100 |       0 |   10.74 | 59-310            
  AgentFooter.tsx  |   17.07 |      100 |       0 |   17.07 | 28-66             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.8 |    27.27 |     100 |    87.8 | ...,85,95-103,121 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   45.59 |    70.53 |   60.86 |   45.59 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |    9.92 |      100 |       0 |    9.92 | 27-164            
  ...tusDialog.tsx |    5.63 |      100 |       0 |    5.63 | 33-75,80-288      
  ...topDialog.tsx |    6.17 |      100 |       0 |    6.17 | 33-213            
 ...ackground-view |   75.84 |    82.71 |   85.29 |   75.84 |                   
  ...sksDialog.tsx |   71.38 |    80.58 |   76.19 |   71.38 | ...1132,1208-1210 
  ...TasksPill.tsx |   63.75 |    86.95 |     100 |   63.75 | 44,86-106,114-122 
  ...gentPanel.tsx |    97.4 |    86.31 |     100 |    97.4 | 123,434-438       
 ...nts/extensions |   45.28 |    33.33 |      60 |   45.28 |                   
  ...gerDialog.tsx |   44.31 |    34.14 |      75 |   44.31 | ...71-480,483-488 
  index.ts         |       0 |        0 |       0 |       0 | 1-9               
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   54.88 |    94.23 |   66.66 |   54.88 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |    6.18 |      100 |       0 |    6.18 | 20-131            
  ...nListStep.tsx |   88.43 |    94.73 |      80 |   88.43 | 52-53,59-72,106   
  ...electStep.tsx |   13.46 |      100 |       0 |   13.46 | 20-70             
  ...nfirmStep.tsx |   19.56 |      100 |       0 |   19.56 | 23-65             
  index.ts         |     100 |      100 |     100 |     100 |                   
 ...mponents/hooks |   86.78 |     81.3 |   91.89 |   86.78 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.24 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   20.98 |    86.36 |   83.33 |   20.98 |                   
  ...ealthPill.tsx |   68.42 |    85.71 |     100 |   68.42 | 40-46             
  ...entDialog.tsx |    3.64 |      100 |       0 |    3.64 | 41-717            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-30              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   95.83 |    88.88 |     100 |   95.83 | 16,20,109-110     
 ...ents/mcp/steps |   26.74 |    54.54 |   42.85 |   26.74 |                   
  ...icateStep.tsx |    5.88 |      100 |       0 |    5.88 | 40-55,58-296      
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |    5.26 |      100 |       0 |    5.26 | 31-247            
  ...rListStep.tsx |   75.18 |    59.37 |     100 |   75.18 | ...53-158,169-173 
  ...etailStep.tsx |   10.41 |      100 |       0 |   10.41 | ...1,67-79,82-139 
  ToolListStep.tsx |   69.02 |       50 |     100 |   69.02 | ...22,125,134-143 
 ...nents/messages |   83.23 |    80.55 |    75.6 |   83.23 |                   
  ...ionDialog.tsx |   80.84 |     77.6 |    62.5 |   80.84 | ...98,516,534-536 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |   97.67 |    83.72 |     100 |   97.67 | 119,142,150       
  ...onMessage.tsx |   91.93 |    82.35 |     100 |   91.93 | 57-59,61,63       
  ...nMessages.tsx |   79.06 |      100 |      70 |   79.06 | ...51-264,268-280 
  DiffRenderer.tsx |   93.19 |    86.17 |     100 |   93.19 | ...09,237-238,304 
  ...tsDisplay.tsx |   97.82 |    77.27 |     100 |   97.82 | 87,89             
  ...usMessage.tsx |   76.31 |     42.1 |   66.66 |   76.31 | ...99,101,124,155 
  ...tsDisplay.tsx |    95.1 |    88.05 |     100 |    95.1 | ...29,131,164-169 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   16.66 |      100 |       0 |   16.66 | 22-38             
  ...sMessages.tsx |   55.67 |       40 |   28.57 |   55.67 | ...20-125,133-145 
  ...ryMessage.tsx |   14.28 |      100 |       0 |   14.28 | 23-62             
  ...onMessage.tsx |   81.98 |     72.6 |   33.33 |   81.98 | ...65-467,474-476 
  ...upMessage.tsx |   82.63 |    92.85 |     100 |   82.63 | ...85-412,434-449 
  ToolMessage.tsx  |   88.84 |    75.71 |    92.3 |   88.84 | ...44-749,776-778 
 ...ponents/shared |    86.3 |    80.41 |   95.45 |    86.3 |                   
  ...ctionList.tsx |   99.03 |    95.65 |     100 |   99.03 | 85                
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  MaxSizedBox.tsx  |   83.01 |    86.25 |   88.88 |   83.01 | ...12-513,618-619 
  MultiSelect.tsx  |    93.5 |       75 |     100 |    93.5 | ...39,195-197,207 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   76.25 |    81.81 |     100 |   76.25 | 44-58,65-68       
  StaticRender.tsx |   72.72 |      100 |     100 |   72.72 | 31-33             
  TextInput.tsx    |    80.8 |    66.07 |      80 |    80.8 | ...36-240,252-258 
  ...apsedTime.tsx |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...lizedList.tsx |   84.26 |    80.88 |      90 |   84.26 | ...68-696,743-765 
  text-buffer.ts   |    85.7 |    80.81 |   97.91 |    85.7 | ...2604,2702-2703 
  ...er-actions.ts |   86.71 |    67.79 |     100 |   86.71 | ...07-608,809-811 
 ...ents/subagents |   30.87 |        0 |       0 |   30.87 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |    12.1 |      100 |       0 |    12.1 | 33-190            
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   10.95 |      100 |       0 |   10.95 | ...1,56-57,60-102 
 ...bagents/create |    9.13 |      100 |       0 |    9.13 |                   
  ...ionWizard.tsx |    7.28 |      100 |       0 |    7.28 | 34-299            
  ...rSelector.tsx |   14.75 |      100 |       0 |   14.75 | 26-85             
  ...onSummary.tsx |    4.26 |      100 |       0 |    4.26 | 27-331            
  ...tionInput.tsx |    8.63 |      100 |       0 |    8.63 | 23-177            
  ...dSelector.tsx |   33.33 |      100 |       0 |   33.33 | 20-21,26-27,36-63 
  ...nSelector.tsx |    37.5 |      100 |       0 |    37.5 | 20-21,26-27,36-58 
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    4.16 |      100 |       0 |    4.16 | 31-253            
 ...bagents/manage |   21.51 |    59.52 |   27.27 |   21.51 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   20.93 |      100 |       0 |   20.93 | 23-62             
  ...tEditStep.tsx |   25.53 |      100 |       0 |   25.53 | ...2,37-38,51-124 
  ...ctionStep.tsx |   35.42 |    59.52 |     100 |   35.42 | ...20-432,437-439 
  ...iewerStep.tsx |   13.72 |      100 |       0 |   13.72 | 18-73             
  ...gerDialog.tsx |    6.74 |      100 |       0 |    6.74 | 35-341            
 ...mponents/views |   70.21 |    67.32 |    64.7 |   70.21 |                   
  ContextUsage.tsx |   70.88 |    63.88 |      80 |   70.88 | ...20-426,463-557 
  DoctorReport.tsx |     9.8 |      100 |       0 |     9.8 | 25-54,57-131      
  ...sionsList.tsx |   87.69 |    73.68 |     100 |   87.69 | 65-72             
  McpStatus.tsx    |   89.53 |    60.52 |     100 |   89.53 | ...72,175-177,262 
  SkillsList.tsx   |   27.27 |      100 |       0 |   27.27 | 18-35             
  ToolsList.tsx    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   77.64 |    77.53 |   82.14 |   77.64 |                   
  ...ewContext.tsx |    64.7 |    85.71 |      50 |    64.7 | ...22-225,231-241 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |    93.3 |    64.28 |      50 |    93.3 | ...35-236,263-267 
  ...deContext.tsx |     100 |      100 |     100 |     100 |                   
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   82.35 |    82.84 |     100 |   82.35 | ...1159,1165-1167 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   43.28 |     62.5 |    62.5 |   43.28 | ...56-259,263-266 
  ...gsContext.tsx |   83.33 |       50 |     100 |   83.33 | 17-18             
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...nsContext.tsx |   88.23 |       50 |     100 |   88.23 | 118-119           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 195-196           
  ...deContext.tsx |   76.08 |    72.72 |     100 |   76.08 | 47-48,52-59,77-78 
 src/ui/daemon     |   90.76 |    73.73 |   95.45 |   90.76 |                   
  ...TuiAdapter.ts |   90.76 |    73.73 |   95.45 |   90.76 | ...53,771-772,858 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   83.02 |    82.25 |   87.71 |   83.02 |                   
  ...dProcessor.ts |   83.12 |    82.56 |     100 |   83.12 | ...88-389,408-435 
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...dProcessor.ts |    94.8 |    70.58 |     100 |    94.8 | ...76-277,282-283 
  ...dProcessor.ts |   84.15 |     62.9 |      80 |   84.15 | ...1004,1025-1029 
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      32 |       60 |     100 |      32 | 42-44,51-90       
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   19.81 |    66.66 |      25 |   19.81 | 57-175            
  ...Completion.ts |   92.81 |    89.09 |     100 |   92.81 | ...86-187,224-227 
  ...ifications.ts |   92.07 |    96.29 |     100 |   92.07 | 116-124           
  ...tIndicator.ts |   83.49 |    70.96 |     100 |   83.49 | ...60,168,170-178 
  ...waySummary.ts |   96.22 |    69.69 |     100 |   96.22 | 125-127,169       
  ...ndTaskView.ts |   94.21 |    76.08 |     100 |   94.21 | 122-126,213,219   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   94.36 |    74.35 |     100 |   94.36 | ...60,168-169,209 
  ...ompletion.tsx |   96.01 |    83.87 |     100 |   96.01 | ...22-223,225-226 
  ...dMigration.ts |   90.62 |       75 |     100 |   90.62 | 38-40             
  useCompletion.ts |    92.4 |     87.5 |     100 |    92.4 | 68-69,93-94,98-99 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   77.27 |       50 |     100 |   77.27 | ...2,75-79,93-101 
  ...eteCommand.ts |   78.53 |    88.57 |     100 |   78.53 | ...96-104,112-113 
  ...ialogClose.ts |   13.33 |      100 |     100 |   13.33 | 82-173            
  useDiffData.ts   |   11.62 |      100 |       0 |   11.62 | 44-87             
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |    97.67 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |   93.45 |     92.3 |     100 |   93.45 | ...83-287,300-306 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |   57.89 |    71.42 |      50 |   57.89 | ...66-168,190-191 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |      100 |     100 |     100 |                   
  ...ggestions.tsx |   89.15 |     62.5 |      50 |   89.15 | ...22-124,149-150 
  ...miniStream.ts |   78.45 |    76.16 |   91.66 |   78.45 | ...2568,2595-2600 
  ...BranchName.ts |    90.9 |     92.3 |     100 |    90.9 | 19-20,55-58       
  ...oryManager.ts |   94.04 |    94.11 |     100 |   94.04 | 47,119-122        
  ...ooksDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |   92.59 |    85.71 |     100 |   92.59 | 63-64,72,94-96    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 69                
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |    9.67 |      100 |       0 |    9.67 | 11-32,39-90       
  ...gIndicator.ts |     100 |      100 |     100 |     100 |                   
  useLogger.ts     |   21.05 |      100 |       0 |   21.05 | 15-37             
  useMCPHealth.ts  |   63.15 |       75 |      50 |   63.15 | 42-52,64-67       
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...moryDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...delCommand.ts |     100 |       75 |     100 |     100 | 22                
  ...ouseEvents.ts |   87.17 |    88.88 |   66.66 |   87.17 | 81-82,86-88       
  ...raseCycler.ts |   84.74 |    76.47 |     100 |   84.74 | ...49,52-53,69-71 
  ...rredEditor.ts |   58.33 |    22.22 |     100 |   58.33 | 23-27,29-33       
  ...derUpdates.ts |   86.49 |    77.96 |    90.9 |   86.49 | ...26,288-300,348 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |    84.7 |    93.33 |     100 |    84.7 | ...71-276,372-382 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   96.96 |    83.33 |     100 |   96.96 | 101-102,131       
  ...ompletion.tsx |   90.59 |    83.33 |     100 |   90.59 | ...01,104,137-140 
  ...ectionList.ts |   96.98 |    95.78 |     100 |   96.98 | ...83-184,238-241 
  ...sionPicker.ts |   92.87 |    90.35 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |      100 |     100 |     100 |                   
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   91.74 |    79.41 |     100 |   91.74 | ...74,122-123,133 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-73              
  ...Completion.ts |    82.7 |    85.41 |   94.73 |    82.7 | ...69-671,679-715 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |    96.3 |    92.19 |     100 |    96.3 | ...77-380,466-473 
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...tification.ts |     100 |    85.71 |     100 |     100 | 47                
  ...alProgress.ts |   53.06 |       50 |   66.66 |   53.06 | ...53,61-68,79-85 
  ...rminalSize.ts |   76.19 |      100 |      50 |   76.19 | 21-25             
  ...emeCommand.ts |   67.01 |    29.41 |     100 |   67.01 | ...10-111,115-116 
  useTimer.ts      |   88.09 |    85.71 |     100 |   88.09 | 44-45,51-53       
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...rustModify.ts |     100 |      100 |     100 |     100 |                   
  useTurnDiffs.ts  |   95.12 |    78.57 |     100 |   95.12 | 133-134,156-157   
  ...elcomeBack.ts |   87.36 |     90.9 |     100 |   87.36 | ...,94-96,114-115 
  ...reeSession.ts |   93.75 |       70 |     100 |   93.75 | 44-45,87          
  vim.ts           |   83.77 |    80.31 |     100 |   83.77 | ...55,759-767,776 
 src/ui/layouts    |   89.72 |     87.5 |     100 |   89.72 |                   
  ...AppLayout.tsx |   89.88 |     87.5 |     100 |   89.88 | 51-53,93-98       
  ...AppLayout.tsx |   89.47 |     87.5 |     100 |   89.47 | 58-63             
 src/ui/models     |   80.24 |    79.16 |   71.42 |   80.24 |                   
  ...ableModels.ts |   80.24 |    79.16 |   71.42 |   80.24 | ...,61-71,123-125 
 ...noninteractive |     100 |      100 |   14.28 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |   14.28 |     100 |                   
 src/ui/state      |   94.91 |    81.81 |     100 |   94.91 |                   
  extensions.ts    |   94.91 |    81.81 |     100 |   94.91 | 68-69,88          
 src/ui/themes     |   98.53 |    70.58 |     100 |   98.53 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |     100 |      100 |     100 |     100 |                   
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |    85.96 |     100 |   88.59 | ...57-261,266-270 
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  qwen-dark.ts     |     100 |      100 |     100 |     100 |                   
  qwen-light.ts    |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-manager.ts |   87.98 |    82.89 |     100 |   87.98 | ...48-357,362-363 
  theme.ts         |     100 |    38.02 |     100 |     100 | ...34-449,457-461 
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   84.16 |    82.86 |   92.55 |   84.16 |                   
  ...Colorizer.tsx |   79.53 |    83.78 |     100 |   79.53 | ...51-152,249-275 
  ...nRenderer.tsx |   68.83 |    70.14 |      50 |   68.83 | ...52-254,274-293 
  ...wnDisplay.tsx |   86.01 |    87.66 |     100 |   86.01 | ...87,704,729-754 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   92.08 |    80.45 |      95 |   92.08 | ...76-679,723-728 
  ...odeDisplay.ts |   96.55 |     90.9 |     100 |   96.55 | 34                
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |   59.61 |    58.82 |     100 |   59.61 | ...,86-88,107-149 
  commandUtils.ts  |    95.9 |    88.42 |     100 |    95.9 | ...66,168-169,293 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   88.37 |    72.22 |     100 |   88.37 | 23,25,29,31,33    
  formatters.ts    |   95.23 |    98.27 |     100 |   95.23 | 117-120           
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    94.59 |     100 |     100 | 40,62             
  historyUtils.ts  |   94.11 |       94 |     100 |   94.11 | 94-97             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |    8.23 |      100 |       0 |    8.23 | ...31-132,135-136 
  latexRenderer.ts |   94.95 |     73.8 |     100 |   94.95 | ...76-178,184-187 
  layoutUtils.ts   |     100 |      100 |     100 |     100 |                   
  ...ightLoader.ts |     100 |    89.47 |     100 |     100 | 81,110            
  ...nUtilities.ts |   69.84 |    85.71 |     100 |   69.84 | 75-91,100-101     
  ...ToolGroups.ts |   98.66 |    96.77 |     100 |   98.66 | 48-49             
  ...geRenderer.ts |   86.23 |    69.06 |   95.12 |   86.23 | ...1284,1324-1330 
  ...alRenderer.ts |   86.69 |     71.9 |     100 |   86.69 | ...1476,1513-1519 
  ...lsBySource.ts |     100 |    95.23 |     100 |     100 | 84                
  mouse.ts         |   90.71 |    73.33 |   88.88 |   90.71 | ...40-143,200-201 
  osc8.ts          |   94.73 |    87.75 |     100 |   94.73 | ...49,434,438-439 
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |   98.98 |    97.05 |     100 |   98.98 | 98                
  ...storyUtils.ts |   62.74 |    71.26 |      90 |   62.74 | ...84,432,437-459 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...izedOutput.ts |   94.94 |      100 |   88.88 |   94.94 | 112-117           
  ...wOptimizer.ts |     100 |    96.77 |     100 |     100 | 69                
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   97.61 |    94.84 |   92.85 |   97.61 | ...50-251,386-387 
  todoSnapshot.ts  |   89.33 |    93.47 |     100 |   89.33 | ...,66-78,180-181 
  updateCheck.ts   |     100 |    80.95 |     100 |     100 | 30-42             
 ...i/utils/export |   56.77 |     40.8 |   79.41 |   56.77 |                   
  collect.ts       |   55.92 |    50.58 |   86.36 |   55.92 | ...25-640,642-647 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   57.47 |    20.51 |      80 |   57.47 | ...09-310,324-359 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |      40 |      100 |       0 |      40 | 11-13             
 ...ort/formatters |    3.38 |      100 |       0 |    3.38 |                   
  html.ts          |    9.61 |      100 |       0 |    9.61 | ...28,34-76,82-84 
  json.ts          |      50 |      100 |       0 |      50 | 14-15             
  jsonl.ts         |     3.5 |      100 |       0 |     3.5 | 14-76             
  markdown.ts      |    0.94 |      100 |       0 |    0.94 | 13-295            
 src/utils         |   71.87 |    88.84 |   90.34 |   71.87 |                   
  acpModelUtils.ts |     100 |      100 |     100 |     100 |                   
  apiPreconnect.ts |   96.72 |    97.14 |     100 |   96.72 | 165-168           
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   84.12 |    93.33 |      80 |   84.12 | 75,106-115        
  commands.ts      |     100 |      100 |     100 |     100 |                   
  commentJson.ts   |   90.51 |    91.89 |     100 |   90.51 | 67-76,116         
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.38 |    71.83 |   88.88 |   70.38 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 41-43,49          
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  doctorChecks.ts  |   70.98 |       75 |     100 |   70.98 | ...95-301,325-341 
  ...putCapture.ts |   90.65 |    86.17 |     100 |   90.65 | ...72,370,372-373 
  ...arResolver.ts |   97.14 |    96.42 |     100 |   97.14 | 125-126           
  errors.ts        |   90.85 |    96.36 |    92.3 |   90.85 | 69-70,298-310     
  events.ts        |     100 |      100 |     100 |     100 |                   
  gitUtils.ts      |   91.91 |    84.61 |     100 |   91.91 | 78-81,124-127     
  ...AutoUpdate.ts |   90.96 |    90.47 |   88.88 |   90.96 | 125-136,144,155   
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   89.17 |    92.77 |     100 |   89.17 | ...55,272-273,318 
  languageUtils.ts |   97.89 |    96.42 |     100 |   97.89 | 132-133           
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...onfigUtils.ts |     100 |      100 |     100 |     100 |                   
  ...iveHelpers.ts |   96.79 |    93.28 |     100 |   96.79 | ...76-477,575,588 
  osc.ts           |    97.5 |      100 |   88.88 |    97.5 | 195-196           
  package.ts       |   88.88 |       80 |     100 |   88.88 | 33-34             
  processUtils.ts  |     100 |      100 |     100 |     100 |                   
  readStdin.ts     |   79.62 |       90 |      80 |   79.62 | 33-40,52-54       
  relaunch.ts      |   93.22 |    81.25 |     100 |   93.22 | 65-67,80          
  resolvePath.ts   |   66.66 |       25 |     100 |   66.66 | 12-13,16,18-19    
  runBudget.ts     |   99.35 |    96.77 |     100 |   99.35 | 119               
  sandbox.ts       |       0 |        0 |       0 |       0 | 1-1047            
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  settingsUtils.ts |   82.51 |    91.72 |   89.74 |   82.51 | ...76-694,701-709 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   26.82 |    73.77 |   43.47 |   26.82 | ...36-837,840-859 
  ...upProfiler.ts |   98.46 |    94.52 |     100 |   98.46 | 130-131,305       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       60 |     100 |     100 | 23,32             
  systemInfo.ts    |   95.12 |    89.06 |     100 |   95.12 | ...43-244,249-253 
  ...InfoFields.ts |    87.5 |       65 |     100 |    87.5 | ...24-125,146-147 
  ...iffPreview.ts |   94.11 |    83.33 |     100 |   94.11 | 13                
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   91.17 |    82.35 |     100 |   91.17 | 67-68,73-74,77-78 
  version.ts       |     100 |       50 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  windowTitle.ts   |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |    62.1 |       75 |     100 |    62.1 | 93,107,118-157    
 ...s/housekeeping |   90.15 |     89.7 |   94.11 |   90.15 |                   
  cleanup.ts       |   94.33 |       95 |     100 |   94.33 | 60-62             
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  scheduler.ts     |   89.71 |    88.23 |   85.71 |   89.71 | 51-55,66,116-120  
  throttledOnce.ts |   86.66 |    85.18 |     100 |   86.66 | ...99,105,137-138 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   81.21 |     83.4 |   83.11 |   81.21 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/agents        |   88.06 |    79.77 |   92.13 |   88.06 |                   
  ...transcript.ts |   92.25 |    85.71 |     100 |   92.25 | ...87,306-307,438 
  ...ent-resume.ts |    82.8 |    71.63 |   77.41 |    82.8 | ...1059-1063,1066 
  ...ound-tasks.ts |   95.76 |    87.57 |     100 |   95.76 | ...26-827,898-899 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/arena  |   76.54 |    66.87 |   78.72 |   76.54 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   75.37 |    63.37 |   78.26 |   75.37 | ...1860,1866-1867 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   76.29 |    86.15 |   73.04 |   76.29 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   91.25 |    90.62 |   86.66 |   91.25 | ...94,249-269,328 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   81.82 |    78.04 |   73.27 |   81.82 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   76.81 |    72.89 |   63.63 |   76.81 | ...1614,1641-1688 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   84.48 |    78.04 |   63.63 |   84.48 | ...00-401,404-405 
  ...nteractive.ts |   80.07 |    80.76 |   74.07 |   80.07 | ...53,455,457,460 
  ...statistics.ts |   98.19 |    82.35 |     100 |   98.19 | 127,151,192,225   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/config        |   78.25 |    82.72 |   64.89 |   78.25 |                   
  config.ts        |   76.22 |    81.68 |   60.41 |   76.22 | ...4129,4140-4152 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   95.01 |     90.9 |   90.47 |   95.01 | ...71-372,375-376 
 ...nfirmation-bus |   98.29 |    97.14 |     100 |   98.29 |                   
  message-bus.ts   |   98.14 |    97.05 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   88.39 |    83.92 |   91.13 |   88.39 |                   
  baseLlmClient.ts |   81.25 |    76.47 |   77.77 |   81.25 | ...13,515-525,534 
  client.ts        |   86.74 |     81.1 |   84.44 |   86.74 | ...2101,2107-2119 
  ...tGenerator.ts |    72.1 |    61.11 |     100 |    72.1 | ...63,365,372-375 
  ...lScheduler.ts |   88.32 |    82.22 |   95.52 |   88.32 | ...3553,3614-3625 
  geminiChat.ts    |    90.9 |    87.95 |   96.05 |    90.9 | ...2908,2975-2976 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | 34-42,45-49,52-87 
  logger.ts        |   87.41 |    87.02 |     100 |   87.41 | ...64-568,614-628 
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   92.59 |       75 |      50 |   92.59 | 41-42             
  ...on-helpers.ts |   86.48 |    72.22 |     100 |   86.48 | ...97-198,212-221 
  ...issionFlow.ts |   98.59 |       95 |     100 |   98.59 | 93                
  prompts.ts       |   89.28 |    86.25 |      75 |   89.28 | ...-978,1181-1182 
  tokenLimits.ts   |     100 |    89.47 |     100 |     100 | 51-52             
  ...okTriggers.ts |   99.42 |     90.9 |     100 |   99.42 | 172,183           
  turn.ts          |   96.46 |    88.88 |     100 |   96.46 | ...32,445-446,494 
 ...ntentGenerator |   94.88 |    82.07 |      94 |   94.88 |                   
  ...tGenerator.ts |   96.29 |    83.18 |   92.85 |   96.29 | ...1,971,999-1001 
  converter.ts     |   94.51 |    80.72 |     100 |   94.51 | ...06-607,617,823 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   91.53 |    71.64 |   93.33 |   91.53 |                   
  ...tGenerator.ts |      90 |    70.96 |   92.85 |      90 | ...80-286,304-305 
  index.ts         |     100 |       80 |     100 |     100 | 50                
 ...ntentGenerator |      94 |    83.93 |   91.17 |      94 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   93.87 |    82.37 |   90.62 |   93.87 | ...2,992-993,1021 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   86.12 |    83.98 |   93.58 |   86.12 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   84.89 |    82.17 |   96.15 |   84.89 | ...1394,1610-1625 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   54.54 |    68.75 |      50 |   54.54 | ...79,87-91,95-99 
  ...tGenerator.ts |    66.4 |    70.58 |   88.88 |    66.4 | ...51-157,168-169 
  pipeline.ts      |   93.82 |     84.4 |     100 |   93.82 | ...89-490,498,566 
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |   90.66 |    88.57 |     100 |   90.66 | ...15-319,349-350 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   96.66 |    88.94 |   96.07 |   96.66 |                   
  dashscope.ts     |   97.35 |    91.39 |   93.33 |   97.35 | ...90-291,367-368 
  deepseek.ts      |   94.91 |    89.36 |     100 |   94.91 | ...31-132,145-146 
  default.ts       |   95.79 |    89.65 |   88.88 |   95.79 | 122-123,193-195   
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
 src/extension     |   62.35 |    79.54 |   80.31 |   62.35 |                   
  ...-converter.ts |   66.21 |    52.45 |     100 |   66.21 | ...85-786,795-827 
  ...ionManager.ts |    47.1 |    82.06 |    65.9 |    47.1 | ...1404,1414-1433 
  ...onSettings.ts |   93.46 |    93.05 |     100 |   93.46 | ...17-221,228-232 
  ...-converter.ts |   54.88 |    94.44 |      60 |   54.88 | ...35-146,158-192 
  github.ts        |   46.41 |     87.3 |   63.63 |   46.41 | ...68-374,413-466 
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   97.31 |    93.75 |     100 |   97.31 | ...65,185-186,275 
  npm.ts           |   59.01 |    71.69 |    87.5 |   59.01 | ...23-425,432-436 
  override.ts      |   94.11 |    88.88 |     100 |   94.11 | 63-64,81-82       
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-108,143-149    
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.75 |    83.33 |     100 |   88.75 | ...28-231,234-237 
 src/followup      |   55.57 |    84.14 |   81.25 |   55.57 |                   
  followupState.ts |      96 |    89.74 |     100 |      96 | 159-161,218-219   
  index.ts         |     100 |      100 |     100 |     100 |                   
  overlayFs.ts     |   95.06 |       84 |     100 |   95.06 | 78,108,122,133    
  speculation.ts   |   13.02 |      100 |   16.66 |   13.02 | 89-464,524-575    
  ...onToolGate.ts |     100 |    96.42 |     100 |     100 | 94                
  ...nGenerator.ts |    71.6 |    72.13 |   83.33 |    71.6 | ...88-246,316-318 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   89.57 |    83.45 |   94.44 |   89.57 |                   
  ...eGoalStore.ts |    85.1 |    95.45 |   84.61 |    85.1 | ...63-166,174-182 
  goalHook.ts      |   97.26 |    91.48 |     100 |   97.26 | 100-105           
  goalJudge.ts     |   84.33 |    74.28 |     100 |   84.33 | ...57-358,366-368 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   86.48 |    85.19 |   87.59 |   86.48 |                   
  ...okRegistry.ts |   86.48 |    77.08 |     100 |   86.48 | ...41-344,362-369 
  ...terpolator.ts |   96.66 |    93.33 |     100 |   96.66 | 66-67             
  ...HookRunner.ts |   96.68 |    87.23 |     100 |   96.68 | 110-112,231-233   
  ...Aggregator.ts |   96.09 |       90 |     100 |   96.09 | ...97-298,371,373 
  ...entHandler.ts |   95.09 |    86.58 |   93.93 |   95.09 | ...26,883-884,894 
  hookPlanner.ts   |   87.91 |    85.07 |   84.61 |   87.91 | ...84-186,204-215 
  hookRegistry.ts  |   90.17 |    83.33 |     100 |   90.17 | ...33,352,356,360 
  hookRunner.ts    |   62.42 |    72.04 |   66.66 |   62.42 | ...64-765,774-775 
  hookSystem.ts    |   86.22 |      100 |   68.18 |   86.22 | ...83-684,690-691 
  ...HookRunner.ts |   75.51 |     61.9 |      80 |   75.51 | ...05-406,424-425 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   96.37 |     90.9 |      90 |   96.37 | 342-350,424-425   
  ...SkillHooks.ts |   78.75 |       75 |   66.66 |   78.75 | 62-66,137-152     
  ...oksManager.ts |   96.66 |    91.66 |     100 |   96.66 | ...90,209-210,223 
  ssrfGuard.ts     |   77.22 |    85.36 |     100 |   77.22 | ...57,261-267,273 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   92.77 |       94 |    87.5 |   92.77 | ...67-468,553-557 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
 src/ide           |   75.55 |    83.52 |   78.33 |   75.55 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   66.14 |    81.75 |   66.66 |   66.14 | ...7-968,997-1005 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/lsp           |   42.41 |    52.21 |   52.14 |   42.41 |                   
  ...nfigLoader.ts |   70.27 |    35.89 |   94.73 |   70.27 | ...20-422,426-432 
  ...ionFactory.ts |   42.69 |    79.16 |      50 |   42.69 | ...62-413,419-436 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   25.31 |    62.06 |   41.66 |   25.31 | ...85-704,710-740 
  ...eLspClient.ts |   32.77 |       80 |   17.64 |   32.77 | ...84-288,294-295 
  ...LspService.ts |   51.85 |    65.98 |   68.57 |   51.85 | ...1339,1399-1409 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |   78.75 |    75.45 |   75.92 |   78.75 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   73.82 |    53.92 |     100 |   73.82 | ...88-895,902-904 
  ...en-storage.ts |   98.64 |    97.72 |     100 |   98.64 | 88-89             
  oauth-utils.ts   |   70.58 |    85.29 |    90.9 |   70.58 | ...70-290,315-344 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   79.72 |    87.05 |   86.36 |   79.72 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   83.44 |    84.21 |   92.85 |   83.44 | ...68-178,186-187 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   71.03 |    75.44 |    69.1 |   71.03 |                   
  const.ts         |     100 |      100 |     100 |     100 |                   
  dream.ts         |      66 |    73.33 |      50 |      66 | 51,108-149        
  ...entPlanner.ts |   57.84 |    72.72 |   33.33 |   57.84 | ...35,140-147,152 
  entries.ts       |   63.77 |    79.16 |      50 |   63.77 | ...72-180,183-189 
  extract.ts       |   95.23 |    79.16 |     100 |   95.23 | 82-87,126         
  ...entPlanner.ts |   63.08 |    65.71 |   41.17 |   63.08 | ...17,222-223,332 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |      46 |    61.53 |   44.44 |      46 | ...05,212,215-347 
  indexer.ts       |   84.61 |    45.45 |     100 |   84.61 | ...51,57-58,70-71 
  manager.ts       |   75.34 |    81.04 |    75.6 |   75.34 | ...1279,1292-1294 
  memoryAge.ts     |   90.47 |    77.77 |     100 |   90.47 | 50-51             
  paths.ts         |   55.47 |    89.47 |   85.71 |   55.47 | ...,89-90,106-114 
  prompt.ts        |   93.36 |    71.42 |     100 |   93.36 | ...58,161,228-229 
  recall.ts        |   77.54 |    69.38 |   88.88 |   77.54 | ...53-258,282-293 
  ...ceSelector.ts |   91.86 |    77.27 |     100 |   91.86 | ...15,117-118,126 
  scan.ts          |   87.91 |    68.42 |     100 |   87.91 | ...47-48,58,82-87 
  ...entPlanner.ts |   58.02 |    66.66 |   56.25 |   58.02 | ...47-268,344-389 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   94.44 |    83.33 |     100 |   94.44 | 56-57,92-93       
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   79.38 |    78.33 |   81.81 |   79.38 | ...58-272,286-291 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   89.91 |    87.31 |   88.15 |   89.91 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   90.24 |    91.42 |     100 |   90.24 | 142,148,151-160   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |    47.82 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   98.66 |    92.85 |     100 |   98.66 | 162,324,330       
  modelRegistry.ts |     100 |    98.63 |     100 |     100 | 229               
  modelsConfig.ts  |   85.99 |       85 |   82.92 |   85.99 | ...1312,1341-1342 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/permissions   |   76.59 |    89.81 |      60 |   76.59 |                   
  autoMode.ts      |    92.9 |    92.15 |     100 |    92.9 | ...34-235,256-266 
  ...transcript.ts |      98 |    84.61 |     100 |      98 | 200-201           
  classifier.ts    |   92.89 |    91.42 |     100 |   92.89 | 151-158,342-346   
  ...erousRules.ts |     100 |    89.36 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |   78.41 |    86.06 |   82.14 |   78.41 | ...-929,1035-1039 
  rule-parser.ts   |   97.37 |    93.82 |     100 |   97.37 | ...-875,1024-1026 
  ...-semantics.ts |   58.35 |    86.06 |    30.2 |   58.35 | ...1604-1614,1643 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   98.18 |       90 |     100 |   98.18 |                   
  system-prompt.ts |   98.18 |       90 |     100 |   98.18 | 150               
 src/prompts       |   83.63 |      100 |    87.5 |   83.63 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |     100 |      100 |     100 |     100 |                   
 src/providers     |   79.44 |    64.39 |   64.28 |   79.44 |                   
  all-providers.ts |      68 |      100 |       0 |      68 | 68-69,73-79,83-89 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   98.87 |    87.27 |     100 |   98.87 | 268-269           
  ...der-config.ts |   69.73 |    47.29 |   68.42 |   69.73 | ...10-411,418-427 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.29 |    86.36 |      50 |   97.29 |                   
  ...oding-plan.ts |   87.17 |      100 |       0 |   87.17 | 81-83,86-88,90-93 
  ...a-standard.ts |     100 |      100 |     100 |     100 |                   
  ...token-plan.ts |     100 |      100 |     100 |     100 |                   
  ...m-provider.ts |   97.01 |    81.25 |      75 |   97.01 | 120-121           
  deepseek.ts      |     100 |      100 |     100 |     100 |                   
  idealab.ts       |     100 |      100 |     100 |     100 |                   
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   84.48 |     77.6 |   95.83 |   84.48 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   80.85 |    70.74 |   90.32 |   80.85 | ...1169-1185,1215 
  ...kenManager.ts |   85.36 |    76.61 |     100 |   85.36 | ...52-757,778-783 
 src/services      |   86.11 |    83.99 |   91.95 |   86.11 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   97.35 |    85.34 |     100 |   97.35 | ...94,117,417-418 
  ...ionService.ts |   98.19 |    94.94 |     100 |   98.19 | 493,495-499,602   
  ...ingService.ts |   83.88 |    83.44 |   83.33 |   83.88 | ...1268,1285-1286 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |     100 |    97.43 |     100 |     100 | 215,268           
  cronScheduler.ts |   97.56 |    92.98 |     100 |   97.56 | 62-63,77,155      
  ...eryService.ts |   80.43 |    95.45 |      75 |   80.43 | ...19-134,140-141 
  ...oryService.ts |   86.18 |    76.76 |   91.17 |   86.18 | ...1150,1191-1194 
  fileReadCache.ts |     100 |      100 |     100 |     100 |                   
  ...temService.ts |   91.27 |    82.69 |    90.9 |   91.27 | ...94,196,294-301 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  gitService.ts    |   68.75 |     92.3 |   55.55 |   68.75 | ...12-122,125-129 
  ...reeService.ts |    69.4 |    68.82 |   93.33 |    69.4 | ...2064,2092-2093 
  ...ionService.ts |   98.13 |     97.8 |   95.45 |   98.13 | ...32-333,380-381 
  ...ticsDumper.ts |   98.18 |    95.23 |     100 |   98.18 | 165-166           
  ...ureMonitor.ts |   95.27 |     91.6 |      96 |   95.27 | ...02,603,617-619 
  ...orRegistry.ts |   96.54 |    91.73 |     100 |   96.54 | ...70-471,622-623 
  ...ttachments.ts |   97.24 |    90.39 |     100 |   97.24 | ...08,646,661-662 
  sessionRecap.ts  |   12.65 |      100 |       0 |   12.65 | 44-150            
  ...ionService.ts |   90.47 |     79.2 |   96.87 |   90.47 | ...1324,1328-1329 
  sessionTitle.ts  |   93.87 |    71.15 |     100 |   93.87 | ...33-236,267-268 
  ...ionService.ts |   81.29 |    78.31 |   89.28 |   81.29 | ...1926,1932-1937 
  ...Estimation.ts |     100 |      100 |     100 |     100 |                   
  ...UseSummary.ts |   94.63 |    88.46 |     100 |   94.63 | ...62-164,214-215 
  ...reeCleanup.ts |   14.56 |      100 |   33.33 |   14.56 | 58-185            
  ...ionService.ts |   84.21 |    79.41 |     100 |   84.21 | ...18-219,235-236 
 ...icrocompaction |   98.05 |     91.8 |     100 |   98.05 |                   
  microcompact.ts  |   98.05 |     91.8 |     100 |   98.05 | ...19,289,293,391 
 src/skills        |   88.51 |    85.75 |   94.54 |   88.51 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |     93.1 |     100 |     100 | 93,112            
  skill-load.ts    |      94 |    86.56 |     100 |      94 | ...08,228,240-242 
  skill-manager.ts |   84.26 |    80.87 |   90.32 |   84.26 | ...1155,1162-1166 
  skill-paths.ts   |   89.15 |    86.36 |     100 |   89.15 | ...00-101,106-107 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/subagents     |   82.61 |    78.89 |   95.23 |   82.61 |                   
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   77.15 |    71.36 |    93.1 |   77.15 | ...1178,1200-1201 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 51-56,69-74,78-83 
 src/telemetry     |   77.93 |    87.73 |   81.15 |   77.93 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...attributes.ts |   98.13 |       88 |     100 |   98.13 | 185-187           
  ...-exporters.ts |   46.37 |      100 |   44.44 |   46.37 | ...85,88-89,92-93 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.09 |    95.61 |      95 |   99.09 | 141,365-366       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   54.08 |    65.85 |   60.86 |   54.08 | ...1250,1267-1287 
  metrics.ts       |      75 |    81.52 |   75.43 |      75 | ...1018,1021-1032 
  ...attributes.ts |     100 |      100 |     100 |     100 |                   
  sanitize.ts      |      80 |    83.33 |     100 |      80 | 35-36,41-42       
  sdk.ts           |   93.06 |     88.4 |   81.81 |   93.06 | ...72-573,593-597 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   88.47 |    87.39 |   96.29 |   88.47 | ...1345,1376-1379 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  ...e-id-utils.ts |     100 |      100 |     100 |     100 |                   
  tracer.ts        |   98.61 |    89.36 |     100 |   98.61 | 53,108            
  types.ts         |   80.89 |     86.4 |   85.33 |   80.89 | ...1215,1218-1247 
  uiTelemetry.ts   |   92.97 |    96.96 |   81.25 |   92.97 | ...93-194,200-207 
 ...ry/qwen-logger |   68.17 |     80.2 |   65.51 |   68.17 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   68.17 |       80 |   64.91 |   68.17 | ...1077,1115-1116 
 src/test-utils    |   93.16 |    95.91 |   76.47 |   93.16 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   91.19 |    97.14 |   72.41 |   91.19 | ...38,202-203,216 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   79.39 |    81.88 |   86.06 |   79.39 |                   
  ...erQuestion.ts |   88.93 |    76.74 |    90.9 |   88.93 | ...39-340,347-348 
  cron-create.ts   |   88.11 |    88.88 |    62.5 |   88.11 | ...,43-44,165-172 
  cron-delete.ts   |   96.82 |      100 |   83.33 |   96.82 | 26-27             
  cron-list.ts     |   96.66 |      100 |   83.33 |   96.66 | 25-26             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |   81.02 |    84.07 |      75 |   81.02 | ...15-716,826-876 
  ...r-worktree.ts |   83.14 |    67.56 |    87.5 |   83.14 | ...84-187,278-279 
  exit-worktree.ts |   84.23 |    85.96 |   91.66 |   84.23 | ...92-293,298-312 
  exitPlanMode.ts  |   85.09 |    85.71 |     100 |   85.09 | ...60-163,177-189 
  glob.ts          |   90.63 |    88.33 |   84.61 |   90.63 | ...28,171,302,305 
  grep.ts          |   79.19 |    85.71 |   78.94 |   79.19 | ...20,560,569-576 
  ls.ts            |   96.74 |    90.27 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.77 |    60.09 |   90.32 |   72.77 | ...1211,1213-1214 
  ...nt-manager.ts |   84.36 |    82.74 |   84.21 |   84.36 | ...2099-2103,2142 
  mcp-client.ts    |   39.91 |    83.82 |   69.44 |   39.91 | ...1618,1622-1625 
  mcp-tool.ts      |   90.98 |    88.88 |   96.42 |   90.98 | ...95-596,646-647 
  memory-config.ts |       0 |        0 |       0 |       0 | 1-47              
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 102,109           
  monitor.ts       |   91.65 |    84.05 |   88.46 |   91.65 | ...87,600,796-801 
  notebook-edit.ts |   85.11 |    76.42 |   81.25 |   85.11 | ...54-870,916-917 
  ...nforcement.ts |   82.57 |       90 |     100 |   82.57 | 174-185,234-247   
  read-file.ts     |    95.4 |    90.32 |      90 |    95.4 | ...99,298-301,304 
  ripGrep.ts       |   94.59 |    85.71 |   93.33 |   94.59 | ...60,463,541-542 
  ...-transport.ts |    6.34 |      100 |       0 |    6.34 | 47-145            
  send-message.ts  |   84.68 |    91.66 |    62.5 |   84.68 | ...,82-90,167-170 
  shell.ts         |   73.49 |    80.03 |   91.42 |   73.49 | ...4243,4292-4298 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   89.72 |     93.1 |   89.47 |   89.72 | ...56,460,483-505 
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-stop.ts     |   93.14 |    96.15 |   85.71 |   93.14 | 39-40,54-64       
  todoWrite.ts     |   89.27 |    82.05 |   92.85 |   89.27 | ...50-555,577-578 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   74.85 |    76.85 |   80.95 |   74.85 | ...30-831,839-840 
  tool-search.ts   |   95.19 |    86.48 |    92.3 |   95.19 | ...47-153,208-213 
  tools.ts         |   92.14 |    90.38 |   89.47 |   92.14 | ...78-479,495-501 
  web-fetch.ts     |   88.84 |       80 |   92.85 |   88.84 | ...12-313,315-316 
  write-file.ts    |   82.65 |    80.45 |   84.61 |   82.65 | ...65-668,696-731 
 src/tools/agent   |   77.17 |    83.43 |   75.64 |   77.17 |                   
  agent.ts         |   77.46 |    83.58 |   76.05 |   77.46 | ...2887,2896-2899 
  fork-subagent.ts |   70.73 |    77.77 |   71.42 |   70.73 | ...22-123,158-169 
 ...s/computer-use |   85.21 |     87.9 |   76.31 |   85.21 |                   
  bootstrap.ts     |   72.09 |    92.85 |   66.66 |   72.09 | 137-191,302-303   
  client.ts        |      38 |      100 |      50 |      38 | ...48-178,182-191 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  install-state.ts |   94.44 |       75 |     100 |   94.44 | 40-41             
  ...n-detector.ts |     100 |     87.5 |     100 |     100 | 43                
  schemas.ts       |     100 |      100 |     100 |     100 |                   
  tool.ts          |   95.67 |    82.97 |    92.3 |   95.67 | 49-50,159-165     
 src/utils         |   89.71 |    87.96 |   94.38 |   89.71 |                   
  LruCache.ts      |       0 |        0 |       0 |       0 | 1-41              
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |   94.76 |    93.06 |     100 |   94.76 | ...30-531,634-638 
  bareMode.ts      |   27.27 |      100 |       0 |   27.27 | 9-15,18-19        
  browser.ts       |    7.69 |      100 |       0 |    7.69 | 17-56             
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |      90 |    87.71 |     100 |      90 | ...54-155,158-159 
  cronDisplay.ts   |   42.85 |    23.07 |     100 |   42.85 | 26-31,33-45,47-54 
  cronParser.ts    |   89.74 |    85.71 |     100 |   89.74 | ...,63-64,183-186 
  debugLogger.ts   |    95.9 |    93.93 |   94.73 |    95.9 | 106-107,222-226   
  editHelper.ts    |   93.63 |    83.52 |     100 |   93.63 | ...28-429,463-464 
  editor.ts        |    97.6 |     95.4 |     100 |    97.6 | ...25-326,328-329 
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |     100 |    95.45 |     100 |     100 | 83                
  errorParsing.ts  |    97.7 |    97.05 |     100 |    97.7 | 72-73             
  ...rReporting.ts |   88.46 |       90 |     100 |   88.46 | 69-74             
  errors.ts        |   70.54 |    79.59 |      50 |   70.54 | ...15-231,235-241 
  fetch.ts         |   70.18 |    71.42 |   71.42 |   70.18 | ...42,148,161,186 
  fileUtils.ts     |    91.5 |    86.13 |   95.23 |    91.5 | ...1191,1195-1201 
  forkedAgent.ts   |   80.68 |    78.12 |   83.33 |   80.68 | ...39-545,550-556 
  formatters.ts    |   81.81 |       75 |     100 |   81.81 | 15-16             
  ...eUtilities.ts |   89.21 |    86.66 |     100 |   89.21 | 16-17,49-55,65-66 
  ...rStructure.ts |   94.36 |    94.28 |     100 |   94.36 | ...17-120,330-335 
  getPty.ts        |    12.5 |      100 |       0 |    12.5 | 21-34             
  gitDiff.ts       |   92.36 |    79.53 |     100 |   92.36 | ...55-856,928-929 
  ...noreParser.ts |    92.3 |    89.36 |     100 |    92.3 | ...15-116,186-187 
  gitUtils.ts      |   73.64 |    90.32 |   83.33 |   73.64 | ...,78-79,103-154 
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   88.98 |    90.66 |   91.66 |   88.98 | ...46-349,359-365 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...yDiscovery.ts |   88.27 |    83.87 |     100 |   88.27 | ...76,279,407-410 
  ...tProcessor.ts |    93.2 |    89.18 |     100 |    93.2 | ...82-288,370-371 
  ...Inspectors.ts |   61.53 |      100 |      50 |   61.53 | 18-23             
  modelId.ts       |   98.95 |    98.21 |     100 |   98.95 | 148               
  ...kerChecker.ts |   90.78 |    91.66 |     100 |   90.78 | 73-79             
  notebook.ts      |   94.57 |    89.83 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   90.85 |    87.87 |     100 |   90.85 | ...97-199,222-227 
  partUtils.ts     |     100 |    98.61 |     100 |     100 | 206               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   93.21 |    91.86 |     100 |   93.21 | ...89-390,392-394 
  pdf.ts           |   93.68 |    87.05 |     100 |   93.68 | ...96-297,321-325 
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   58.57 |       76 |     100 |   58.57 | ...4,88-89,95-100 
  ...noreParser.ts |   85.45 |    85.18 |     100 |   85.45 | ...59,65-66,72-73 
  rateLimit.ts     |   92.55 |    85.92 |     100 |   92.55 | ...70-272,309-310 
  readManyFiles.ts |   87.59 |       84 |     100 |   87.59 | ...09-211,227-238 
  retry.ts         |   91.86 |    87.17 |     100 |   91.86 | ...30,451,458-459 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ripgrepUtils.ts  |   46.79 |    84.37 |   66.66 |   46.79 | ...45-246,258-335 
  ...sDiscovery.ts |   97.42 |    92.85 |     100 |   97.42 | ...04,182-183,202 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   82.18 |    85.18 |   95.23 |   82.18 | ...24,549,578-587 
  runtimeStatus.ts |    97.5 |    88.57 |     100 |    97.5 | 162-163           
  safeJsonParse.ts |   74.07 |    83.33 |     100 |   74.07 | 40-46             
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   90.78 |    88.23 |     100 |   90.78 | ...41-42,93,95-96 
  ...aValidator.ts |   94.57 |    80.26 |     100 |   94.57 | ...04,213-216,270 
  ...r-launcher.ts |   76.92 |     91.3 |   66.66 |   76.92 | ...34,136,157-195 
  ...orageUtils.ts |   96.89 |    85.84 |     100 |   96.89 | ...51,367,447,466 
  shell-utils.ts   |   84.22 |    89.91 |     100 |   84.22 | ...1583,1590-1594 
  ...lAstParser.ts |   95.58 |    85.79 |     100 |   95.58 | ...1067-1069,1079 
  ...ContextEnv.ts |     100 |      100 |     100 |     100 |                   
  ...nlyChecker.ts |    95.1 |    91.66 |     100 |    95.1 | ...16-317,325-326 
  sideQuery.ts     |   86.17 |    86.53 |     100 |   86.17 | ...55-161,163-169 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   81.48 |       75 |     100 |   81.48 | 54-59             
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  textUtils.ts     |      60 |      100 |   66.66 |      60 | 36-55             
  thoughtUtils.ts  |     100 |    92.85 |     100 |     100 | 71                
  ...-converter.ts |   94.59 |    85.71 |     100 |   94.59 | 35-36             
  tool-utils.ts    |    93.6 |     91.3 |     100 |    93.6 | ...58-159,162-163 
  truncation.ts    |     100 |       92 |     100 |     100 | 52,71             
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...aceContext.ts |   93.71 |    89.28 |   93.33 |   93.71 | ...24-225,249-251 
  xml.ts           |     100 |      100 |     100 |     100 |                   
  yaml-parser.ts   |      92 |     84.9 |     100 |      92 | 49-53,65-69       
 ...ils/filesearch |   86.21 |    81.61 |   96.42 |   86.21 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |   82.84 |    77.49 |   94.82 |   82.84 | ...1451,1485-1486 
  fileSearch.ts    |   93.58 |    87.32 |     100 |   93.58 | ...46-247,249-250 
  ignore.ts        |     100 |      100 |     100 |     100 |                   
  result-cache.ts  |     100 |     92.3 |     100 |     100 | 46                
 ...uest-tokenizer |   56.63 |    74.52 |   74.19 |   56.63 |                   
  ...eTokenizer.ts |   41.86 |    76.47 |   69.23 |   41.86 | ...70-443,453-507 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.39 |    69.49 |    90.9 |   68.39 | ...24-325,327-328 
  ...ageFormats.ts |      76 |      100 |   33.33 |      76 | 45-48,55-56       
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
-------------------|---------|----------|---------|---------|-------------------

For detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run.

@wenshao wenshao left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ CI failing: Test (ubuntu-latest, Node 22.x). 3 Suggestions (no blockers).

Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/tools/agent/agent.ts Outdated
doudouOUC added a commit that referenced this pull request May 22, 2026
C1 — qwen-code.subagent.status was always 'completed' regardless of actual
outcome because the body of runWithSubagentSpan (runSubagentWithHooks /
bgBody) catches all errors internally. The wrapper's catch block was dead
code in production, so cancelled / failed subagents were indistinguishable
from successful ones in telemetry. Fix: body now opts into reporting its
terminal state via a recordSpanOutcome sink, mapping AgentTerminateMode
+ signal state to the span's status taxonomy (GOAL → completed, CANCELLED
/ signal aborted → cancelled, ERROR / MAX_TURNS / TIMEOUT / SHUTDOWN →
failed). Background path also switched to bgAbortController.signal (was
hookOpts.signal — silent-failure-hunter follow-up: task_stop on a bg
agent was being classified as 'failed' instead of 'aborted').

C2 — qwen-code.subagent.depth was off-by-one for any nested subagent
because getCurrentAgentDepth() returns the parent's depth and the wrapper
did not add +1. Top-level and first-nested both recorded depth=0, defeating
the recursion-detector use case. Fix: depth = parentAgentId !== null
? getCurrentAgentDepth() + 1 : 0.

Tests: nine new tests in agent.test.ts cover the recordSpanOutcome contract
across the success/failure/cancel/throw paths plus the depth fix. Mocks
the subagent-span telemetry layer so the test exercises the real
runWithSubagentSpan wiring without OTel context-with.

Design doc: corrected two stale paths to packages/core/src/agents/runtime/
agent-context.ts (Copilot NIT — old packages/core/src/subagents/agent-context.ts
location pre-dates the runtime move).

Closes wenshao + Copilot review threads on #4410.
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/telemetry/session-tracing.ts Outdated
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/telemetry/log-to-span-processor.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts Outdated
doudouOUC added a commit that referenced this pull request May 22, 2026
wenshao /review round 2 landed 10 inline comments; 8 fixable trivially,
3 require design decisions deferred for follow-up.

Landed:
- runWithSubagentSpan catch uses `??=` so a body that already recorded
  its outcome is not clobbered by a downstream cleanup throw (#3287621709).
  Dedupe against deriveSubagentExceptionMetadata.
- runWithSubagentSpan finally now warns when the body forgot to call
  recordOutcome (defaulting to 'completed' silently was hiding wiring
  bugs) (#3287621748).
- endSubagentSpan warns when the span is missing from activeSpans or
  already ended — exposes the TTL-sweep race where a fork finishing past
  4h would lose its real outcome silently (#3287621722).
- runInSubagentSpanContext skips the AsyncLocalStorage wrap when the span
  isn't tracked (NOOP_SPAN / telemetry disabled), mirroring
  runInToolSpanContext (#3287621756).
- ttlFor uses a typed ReadonlySet<SubagentInvocationKind> so adding a new
  invocation kind causes a TS error instead of silent fall-through to the
  30-min default (#3287621755 part a).
- runSubagentWithHooks success+catch paths now publish recordSpanOutcome
  BEFORE updateDisplay/registry side-effects, so a downstream throw can't
  overwrite the real outcome with the catch's exception derivation
  (#3287621764). Same fix applied to bgBody.
- Fork path now passes `undefined` instead of hookOpts.signal to
  runWithSubagentSpan — fire-and-forget forks shouldn't classify
  parent-turn cancellation as their own abort cause (#3287621745).
- Added 2 tests in agent.test.ts for the signalAborted=true branches of
  deriveSubagentOutcomeMetadata and deriveSubagentExceptionMetadata
  (#3287621740).

Deferred (asked user to triage):
- #3287621731 fork/bg integration test coverage — needs new test
  scaffolding; existing infra only exercises foreground path.
- #3287621737 background-agent-resume.ts:834 calls runWithAgentContext
  but NOT runWithSubagentSpan, so the new skip-list now leaves resumed
  bg agents with zero span coverage. Architectural fix needed: wrap the
  resume path in runWithSubagentSpan vs. making the skip-list opt-in.
- #3287621755 part b — child LLM/tool/hook spans inside a long-running
  fork/background subagent still use 30-min TTL while the parent gets
  4h, so a 2-hour bg agent will have early child spans force-ended at
  30 min. Fix needs TTL inheritance propagation.
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/agents/runtime/agent-context.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts Outdated
doudouOUC added a commit that referenced this pull request May 22, 2026
DeepSeek /review round 3 landed 7 inline comments; 6 fixable here, 1
needs a design call.

Landed (CRITICAL):
- session-tracing.ts: add `subagentContext` ALS so `startLLMRequestSpan`/
  `startToolSpan`/`startHookSpan` inside a foreground subagent parent
  under the subagent span instead of escaping back to the outer
  interaction. Without this fix every foreground subagent span is an
  empty shell — `resolveParentContext` unconditionally picks
  interactionContext over the active OTel span, defeating the entire
  Phase 3 hierarchy claim for the most common invocation. Fork/bg were
  unaffected (their interactionContext is undefined), which masked the
  bug from earlier review rounds (#3290820352).
- agent.ts: recordOutcome uses `??=` (first-write-wins) so the
  inner-catch's exception record can't overwrite the success record
  the body already published (#3290820357). The previous fix put `??=`
  on the OUTER wrapper's catch only, which doesn't protect against the
  INNER body's catch calling recordSpanOutcome with plain assignment.

Landed (SUGGESTION):
- agent.ts: `deriveSubagentExceptionMetadata` now sets
  `resultSummaryPresent: false` so attribute shape stays symmetric with
  success-path metadata — dashboards filtering on
  `qwen-code.subagent.result_summary_present` no longer silently drop
  failed spans (#3290820374).
- agent.ts: `AgentTerminateMode.SHUTDOWN` now maps to
  `status: 'cancelled', terminateReason: 'subagent_shutdown'` instead
  of falling through to the failure branch — SHUTDOWN is graceful
  arena/team-session end, not a real failure (#3290820384).
- agent-context.ts: `getCurrentAgentDepth` JSDoc now documents the
  no-frame vs depth-0-frame ambiguity and points callers at
  `getCurrentAgentId() !== null` as the discriminator (#3290820381).
- session-tracing.ts: `endSubagentSpan` warn for "span not found in
  activeSpans" now gated on `isTelemetrySdkInitialized()` so it doesn't
  fire on every subagent invocation when telemetry is OFF (NOOP_SPAN
  is intentionally never registered in `activeSpans`) (#3290820392).

Tests:
- 4 new tests in session-tracing.test.ts cover the subagentContext
  parenting fix: foreground LLM/tool/hook spans inside
  runInSubagentSpanContext parent under the subagent (regression
  guards against re-introducing the empty-shell behavior); nested
  subagent shadowing; ALS frame teardown.
- Existing tests adjusted to use the corrected `startInteractionSpan`
  options shape and `endInteractionSpan` signature.

Deferred:
- #3290820388 `gen_ai.provider.name` is currently set to SERVICE_NAME
  (`qwen-code`) but the OTel GenAI spec wants the actual GenAI service
  provider (`anthropic` / `openai` / etc.). Fix options: omit the
  attribute, derive from modelOverride via a model→provider mapping,
  or wait for spec to stabilize. Needs scope discussion.
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
doudouOUC added a commit that referenced this pull request May 23, 2026
DeepSeek /review round 4 landed 8 unique inline comments (posted twice
by the bot). All actionable — none required design tradeoffs.

Landed (CRITICAL):
- agent.ts bgBody: fold SHUTDOWN into the CANCELLED branch on the
  registry side so `registry.finalizeCancelled()` matches the span's
  `status='cancelled'` classification. Previously the span said
  "cancelled" while the registry/UI said "failed" — every graceful
  arena/team-session shutdown produced a mismatch. wenshao @
  #3291876034.

Landed (SUGGESTION):
- session-tracing.ts `clearSessionTracingForTesting`: also reset
  `subagentContext` via `enterWith(undefined)` so leaked ALS frames
  don't silently re-parent subsequent tests' spans (subagentContext is
  checked BEFORE interactionContext). wenshao @ #3291876036.
- session-tracing.ts `startLLMRequestSpan`: tri-state the
  `llm_request.context` attribute (`subagent` / `interaction` /
  `standalone`) so subagent-parented LLM calls don't get
  mis-classified as "interaction". wenshao @ #3291876044.
- agent.ts foreground `runSubagentWithHooks`: `resultSummaryPresent`
  now uses raw `subagent.getFinalText()` (not finalText with stop-hook
  warning) so a subagent that produced no result but hit a stop-hook
  block doesn't false-positive as having a summary. Matches the
  bgBody pattern. wenshao @ #3291876047.
- session-tracing.ts `runInSubagentSpanContext`: also clear
  `toolContext` for the body's duration so hooks fired inside a
  subagent (e.g. SubagentStart, before any inner tool) parent under
  the subagent span instead of the outer AGENT tool span. Inner tool
  calls re-set toolContext via runInToolSpanContext, so inner-tool
  parenting stays correct. wenshao @ #3291876051.
- agent.ts `deriveSubagentOutcomeMetadata`: populate `error`/
  `errorType` for the non-throwing failure path (ERROR/MAX_TURNS/
  TIMEOUT) so endSubagentSpan sets standard OTel exception attrs
  instead of the generic 'subagent failed' placeholder. wenshao @
  #3291876053.

Tests (3 new):
- session-tracing.test.ts: background TTL test (mirror of fork TTL
  test — guards against accidental removal of 'background' from
  LONG_TTL_SUBAGENT_KINDS). wenshao @ #3291876056.
- session-tracing.test.ts: startHookSpan inside runInSubagentSpanContext
  (no inner tool) parents under subagent span — regression-guards the
  toolContext-clear fix. wenshao @ #3291876055.
- agent.test.ts: SHUTDOWN terminateMode and ERROR-with-error-attrs
  tests for deriveSubagentOutcomeMetadata.

Verification: 88 agent tests + 74 session-tracing tests pass; tsc +
eslint clean. (1 flaky failure in the unrelated pre-existing git-
isolation test under parallel runs — passes in isolation.)
wenshao
wenshao previously approved these changes May 23, 2026

@wenshao wenshao left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional suggestions (test coverage):

  • packages/core/src/tools/agent/agent.test.tsresultSummaryPresent=false branch is untested. All new tests have mockAgent.getFinalText returning non-empty strings, so resultSummaryPresent is always true. If someone mistakenly replaces subagentRawText with finalText (which has the stop-hook warning appended), empty-result subagents would be incorrectly marked. Add a test with getFinalText returning empty string, asserting resultSummaryPresent=false.

  • packages/core/src/tools/agent/agent.test.ts — The first-write-wins protection (recordedMetadata ??= m) in runWithSubagentSpan has no test coverage. If ??= is accidentally changed to =, a successful subagent whose updateDisplay throws would be incorrectly reported as failed. Add a test that mocks updateOutput to throw after success path, verifying endSubagentSpan still receives the success metadata.

Comment thread packages/core/src/telemetry/log-to-span-processor.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
doudouOUC added a commit that referenced this pull request May 23, 2026
DeepSeek /review round 5 landed 5 inline comments; 4 fixed here, 1
overlaps a previously-deferred architectural item.

Landed (SUGGESTION):
- log-to-span-processor.ts: move `BRIDGE_SKIP_EVENT_NAMES` after all
  imports — the const was declared between two import blocks, breaking
  the file's established pattern. wenshao @ #3292370966.
- agent.ts `runWithSubagentSpan` finally: default to `status: 'failed'`
  (instead of 'completed') when `recordOutcome` was never called. A
  future wiring bug now surfaces as a visible span failure rather than
  silently masking every miss as a success. wenshao @ #3292370968.
- session-tracing.ts `runInSubagentSpanContext`: JSDoc now explicitly
  documents that the function enters `subagentContext` AND clears
  `toolContext` for the body's duration. Both are intentional but
  previously undocumented side effects. wenshao @ #3292370969.
- agent.ts `runWithSubagentSpan` JSDoc: documents the rejection-handling
  contract for void'd callers — body is expected to never reject; the
  wrapper's catch is defensive only; future void'd call sites must wrap
  in `.catch()`. Also added defensive `.catch()` handlers on the two
  existing void'd sites (fork + background) so a freak OTel throw in
  the finally doesn't become an unhandled-promise process exit. wenshao
  @ #3292370970 + silent-failure-hunter earlier round.

Deferred:
- #3292370967 child span TTL inheritance for fork/background. Same as
  #3287621755b from review-2: child LLM/tool/hook spans inside a 4h
  subagent still use the 30-min default and get force-swept. Fix needs
  TTL inheritance propagation (architectural). Deferred to follow-up.

@wenshao wenshao left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Critical] packages/core/src/tools/agent/agent.ts:~1448 — Foreground SHUTDOWN display/span status mismatch.

deriveSubagentOutcomeMetadata classifies SHUTDOWN as status: 'cancelled' with terminateReason: 'subagent_shutdown', but the foreground display logic (the else branch of if (signal?.aborted)) unconditionally maps any non-GOAL, non-aborted outcome to status: 'failed'. The bgBody path was correctly updated to group SHUTDOWN with CANCELLED, but the foreground this.updateDisplay() was not.

When an arena/team session ends and a foreground subagent receives SHUTDOWN, the span says cancelled while the user-facing UI says failed — a confusing contradiction.

      if (signal?.aborted) {
        this.updateDisplay({
          status: 'cancelled',
          terminateReason: 'Agent was cancelled by user',
          executionSummary,
        }, updateOutput);
      } else if (terminateMode === AgentTerminateMode.SHUTDOWN) {
        this.updateDisplay({
          status: 'cancelled',
          terminateReason: 'Agent was gracefully shut down',
          executionSummary,
        }, updateOutput);
      } else {
        this.updateDisplay({
          status: success ? 'completed' : 'failed',
          terminateReason: terminateMode,
          result: finalText,
          executionSummary,
        }, updateOutput);
      }

[Suggestion] packages/core/src/telemetry/session-tracing.ts:~258ensureCleanupInterval does not store the interval ID, making it impossible to stop programmatically. clearSessionTracingForTesting() does not clear the interval either. Consider storing the ID and exposing a stopCleanupInterval() function. Impact is low today (interval.unref() is called) but would make future cleanup logic harder.

— DeepSeek/deepseek-v4-pro via Qwen Code /review

Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/tools/agent/agent.test.ts
Comment thread packages/core/src/tools/agent/agent.test.ts Outdated
Comment thread packages/core/src/telemetry/session-tracing.ts
doudouOUC added a commit that referenced this pull request May 23, 2026
DeepSeek /review round 6 landed 6 suggestions; all 6 fixed.

Landed (SUGGESTION):
- agent.ts bgBody: drop `?` from `recordSpanOutcome` parameter — it
  is always passed and is load-bearing. The optional marker misled
  callers into thinking omission was safe. Also drop the matching
  optional-chains at the two call sites inside bgBody. wenshao @
  #3292521237.
- agent.ts: extract `buildSubagentSpanSpec(hookOpts, subagentConfig,
  invocationKind)` helper. The spec object was triplicated across
  foreground/fork/bg call sites with only `invocationKind` differing;
  the helper makes future spec changes a one-place edit. wenshao @
  #3292521238.
- agent.ts: change wiring-bug fallback's terminateReason from
  `'unknown'` to `'wiring_bug_record_outcome_not_called'` so
  dashboards can separate genuine subagent failures from telemetry
  wiring defects. wenshao @ #3292521240.
- agent.test.ts MAX_TURNS test: add `error`/`errorType` assertions
  matching the ERROR test shape — regression guard for the
  non-throwing failure path. wenshao @ #3292521241.
- agent.test.ts: rename misleading "endSubagentSpan still fires when
  body never opts in (default = completed)" to "endSubagentSpan is
  always called exactly once per invocation"; add a separate
  "fallback: body that skips recordOutcome" test that stubs out
  runSubagentWithHooks via instance-level replacement to genuinely
  exercise the wrapper's defensive default branch. wenshao @
  #3292521244.
- session-tracing.ts TTL sweep: also stamp the subagent-specific
  `qwen-code.subagent.duration_ms` on swept subagent spans, mirroring
  the key endSubagentSpan stamps. Dashboards filtering on the
  subagent-namespaced duration were silently missing TTL-swept spans.
  wenshao @ #3292521245.

Verification: 89 agent + 74 session-tracing tests pass, tsc + eslint
clean.
Comment thread packages/core/src/tools/agent/agent.ts Outdated
Comment thread packages/core/src/telemetry/session-tracing.ts
doudouOUC added a commit that referenced this pull request May 23, 2026
DeepSeek /review round 7 landed 2 small but real suggestions.

Landed:
- agent.ts: move `buildSubagentSpanSpec` to BELOW `runWithSubagentSpan`.
  The previous placement (between `runWithSubagentSpan`'s 28-line
  JSDoc and its method body) detached the JSDoc from runWithSubagentSpan
  — TypeScript/IDE tooling treats the immediately-preceding JSDoc as
  the doc for the next declaration, so the long JSDoc was attaching
  to `buildSubagentSpanSpec` while runWithSubagentSpan got nothing.
  wenshao @ #4410 DeepSeek 3292560016.
- session-tracing.test.ts: assert `qwen-code.subagent.duration_ms` is
  set by the TTL sweep on the fork test (mirror of the assertion shape
  for the generic `qwen-code.span.duration_ms`). Catches the regression
  where the previous review-6 fix is accidentally reverted. wenshao @
  #4410 DeepSeek 3292560017.

Verification: typecheck + lint clean, 163 affected tests pass.
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
doudouOUC added a commit that referenced this pull request May 23, 2026
DeepSeek /review round 8 landed 3 suggestions; all 3 fixed.

Landed:
- session-tracing.test.ts: add `llm_request.context === 'subagent'`
  assertion to the existing "startLLMRequestSpan inside
  runInSubagentSpanContext parents under the subagent span" test.
  The tri-state attribute (`subagent` / `interaction` / `standalone`)
  added in review-4 had no assertion for the 'subagent' value — a
  regression to the old binary ternary would have silently misclassified
  subagent LLM calls as 'interaction' in dashboards. wenshao @
  #3293036596.
- session-tracing.test.ts: add a coverage test for endSubagentSpan's
  `'subagent failed'` fallback (when caller passes `{ status: 'failed' }`
  without an explicit `error` string). Every prior failure test passes
  error, so the fallback message was untested. wenshao @ #3293036600.
- docs/design/telemetry-subagent-spans-design.md: document the
  foreground vs background `SubagentStart` hook span parenting
  divergence as an "Edge cases" table entry. Foreground fires the hook
  inside `runInSubagentSpanContext` (parent = subagent), background
  fires before the wrap (parent = AGENT tool span). Architectural fix
  (move bg hook fire inside framedBgBody) deferred — needs contextState
  threading. wenshao @ #3293036602.

Verification: 75 session-tracing tests pass; tsc + eslint clean.
Comment thread docs/design/telemetry-subagent-spans-design.md Outdated
Comment thread packages/core/src/telemetry/session-tracing.test.ts
doudouOUC added a commit that referenced this pull request May 23, 2026
DeepSeek /review round 9 landed 2 follow-ups to the round-8 doc note.

Landed:
- docs/design: clean up the round-8 edge case row. Remove the trailing
  "wenshao @ #4410 DeepSeek 3293036602" provenance suffix (no other row
  in the 12-row table has review metadata — git log already tracks
  this). Replace the inaccurate "contextState threading" deferral
  rationale with the actual reason: moving bg hook fire inside
  framedBgBody is mechanically simple but changes user-visible
  semantics (hook fires async-detached after the "Background agent
  launched" message returns, vs. today's synchronous-before-return).
  wenshao @ #3293174098.
- session-tracing.test.ts: add a regression guard for the documented
  bg `SubagentStart` parenting asymmetry — hook span fired OUTSIDE
  runInSubagentSpanContext but inside the AGENT tool's toolContext
  parents under the tool span, NOT the subagent. Catches a future
  refactor (or the deferred fix) that changes this. wenshao @
  #3293174101.

Verification: 76 session-tracing tests pass, tsc + eslint clean.
wenshao
wenshao previously approved these changes May 23, 2026

@wenshao wenshao left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No new issues in this round. The incremental commit cleanly addresses the two prior Suggestions (design doc metadata removal + bg SubagentStart hook parenting regression test). Build passes, 216/216 tests pass across affected files. Prior-round open comments remain for the author's consideration.

— qwen3.7-max via Qwen Code /review

@doudouOUC

Copy link
Copy Markdown
Collaborator Author

补充:扩展到其余 end-span helper(commit 5af46793e)

自查时发现同文件还有 3 个 end-span 函数有完全相同的静默 if (!spanCtx || spanCtx.ended) return; 护栏,只覆盖你点名的 3 个会造成内部不一致——尤其 endToolBlockedOnUserSpan 才是最典型的 TTL-race 受害者:SPAN_TTL_MS_DEFAULT(30min)的注释明确写着是 "picked for tool.blocked_on_user(user think-time)",用户离开 >30min → span 被 sweep → 回来响应时正好命中 .ended 分支,却静默无日志。

所以一并补齐,现在全部 6 个非 subagent end-span helper 在 .ended 分支都 debugLogger.debug:

函数 处理
endInteractionSpan +debug(用 getSpanId(spanCtx.span),该函数无 spanId 形参)
endLLMRequestSpan +debug
endToolSpan +debug
endToolExecutionSpan +debug
endToolBlockedOnUserSpan +debug(canonical race victim)
endHookSpan +debug
endSubagentSpan 保持原有 warn(4h 长 TTL)

验证同前:typecheck 通过,session-tracing(95)+log-to-span(50)+agent(92)=237 测试全绿,lint 通过。

Comment thread packages/core/src/telemetry/session-tracing.ts Outdated
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts Outdated
Comment thread packages/core/src/tools/agent/agent.test.ts
Comment thread packages/core/src/tools/agent/agent.ts
1. Remove 16 opaque DeepSeek bot message IDs (e.g. "DeepSeek bot
   3290820352") from comments in session-tracing.ts and agent.ts.
   These numeric IDs are not dereferenceable outside the original
   review conversation; the #4410 PR references remain for tracing
   design decisions.

2. Fix stale JSDoc in agent.ts:1293 — "defaults to completed" was
   wrong since the behavior changed to "defaults to failed with
   wiring_bug_record_outcome_not_called" (the comment was not updated
   when the behavior changed).

3. Fix misleading JSDoc in session-tracing.ts — "causes a TS error"
   claim about LONG_TTL_SUBAGENT_KINDS was incorrect (Set.has()
   accepts any union member; a new kind silently falls through to the
   30-min default).

Addresses wenshao review threads on #4410.
@doudouOUC

Copy link
Copy Markdown
Collaborator Author

已处理全部 8 条未回复 review thread(0 unresolved 剩余)

# 文件 建议 处理 Commit
1 agent.ts:1295 JSDoc "defaults to completed" 过时 Fixed 8e1fc5fdf
2 session-tracing.ts:1292 TTL-sweep race .ended 分支无测试 Deferred — follow-up
3 session-tracing.ts:1341 endSubagentSpan throw resilience 无测试 Fixed 8e1fc5fdf
4 session-tracing.ts:181 JSDoc 错误声称 Set 添新 kind 会 TS 报错 Fixed faed8ea9a
5 session-tracing.ts:1294 endSubagentSpan warn→debug 对齐 Pushed back — 见回复
6 session-tracing.ts:164 16 个不可追溯的 DeepSeek bot 数字 ID Fixed faed8ea9a
7 agent.test.ts:943 invocationKind 断言缺失 Deferred — follow-up
8 agent.ts:1306 ??= double-call 无测试 Deferred — follow-up

Pushed back on #5endSubagentSpanwarn 是刻意的——TTL sweep 会用 aborted/ttl_swept 覆盖真正的终态(如 completed),dashboard 上的 subagent status 因此失真,warn 是给运维的数据质量告警。其他 6 个子 span 的 double-end 不影响任何 dashboard metric,debug 即可。

Deferred #2/#7/#8:均为测试覆盖扩展,不影响正确性。保留作为 follow-up PR scope。

验证:typecheck 通过,237 受影响测试全绿,lint 通过。

Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/telemetry/log-to-span-processor.ts
BRIDGE_SKIP_EVENT_NAMES was unconditionally suppressing bridge spans for
subagent_execution events, but paths going through runForkedAgent (dream,
speculation, suggestion, skillReview, extraction agents) emit this event
WITHOUT creating a native qwen-code.subagent span — losing all trace
representation.

Fix: only skip the bridge when isInNativeSubagentSpan() confirms the ALS
has an active subagent span context (i.e. code is running inside
runInSubagentSpanContext). Paths without native coverage still get bridged.

Addresses wenshao CHANGES_REQUESTED [Critical] on #4410.
@doudouOUC

Copy link
Copy Markdown
Collaborator Author

Fixed: bridge skip regression for forked agents (commit 2b30cac12)

wenshao's [Critical] correctly identified that BRIDGE_SKIP_EVENT_NAMES unconditionally suppressed bridge spans for subagent_execution, but 5 agent types via runForkedAgent emit this event WITHOUT a native span — losing trace representation.

Fix (Option B): bridge skip now checks isInNativeSubagentSpan() (ALS accessor). Only suppresses when inside runInSubagentSpanContext; forkedAgent paths still get bridged.

File Change
session-tracing.ts Export isInNativeSubagentSpan() accessor
log-to-span-processor.ts Add && isInNativeSubagentSpan() to skip condition
log-to-span-processor.test.ts Test both branches (native active → skip; no native → bridge)

Verified: typecheck clean, 147 tests pass (51 log-to-span + 96 session-tracing).

@wenshao wenshao left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No review findings on the incremental commit. The bridge-skip conditional on isInNativeSubagentSpan() correctly restores trace visibility for runForkedAgent paths. 256 tests pass across affected files. Downgraded from Approve to Comment: CI still running. — qwen3.7-max via Qwen Code /review

@wenshao

wenshao commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Verification Report

Reviewer: wenshao
Environment: macOS Darwin 25.4.0, Node.js v22.17.0
Branch: feat/telemetry-phase-3-subagent-spans @ 2b30cac

Build

Check Result
TypeScript (tsc --noEmit) ✅ Clean (3 pre-existing errors in unrelated sdk.ts — missing @opentelemetry/instrumentation-undici dep, not introduced by this PR)
ESLint ✅ Clean on all 6 PR-changed source files

Tests

Test File Tests Result
session-tracing.test.ts 96 ✅ All passed
log-to-span-processor.test.ts 51 ✅ All passed
agent-context.test.ts 17 ✅ All passed
agent.test.ts 92 ✅ All passed
All telemetry tests (17 files) 519 All passed

Code Review Spot Checks

  • runWithSubagentSpan correctly wired into all 3 invocation paths (foreground, fork, background)
  • buildSubagentSpanSpec extracts duplicated spec construction
  • Conditional bridge skip (isInNativeSubagentSpan()) preserves bridge for runForkedAgent paths without native span coverage
  • subagentContext ALS properly parents child spans under subagent (foreground)
  • Hybrid traceId: fork/background get linked root, foreground inherits parent
  • Design doc present (525 lines, 6 decisions)
  • Exports properly wired in telemetry/index.ts
  • recordOutcome first-write-wins (??=) prevents outcome clobbering
  • TTL-swept subagent spans stamped with duration_ms + status='aborted'

Notes

  1. Initial test failures for agent-context.test.ts and agent.test.ts were caused by missing @opentelemetry/instrumentation-undici package (pre-existing dependency gap on this clone, unrelated to PR). After install, all tests pass cleanly.
  2. The 3 tsc errors in sdk.ts exist on main as well — confirmed via git diff origin/main...HEAD showing no changes to that file.

Verdict

✅ LGTM — ready to merge. All PR-introduced code compiles, lints, and passes 519 telemetry tests. The conditional bridge-skip fix (latest commit) correctly preserves observability for forked paths without native span coverage.

@yiliang114 yiliang114 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Design is solid — the three-way invocation-kind split (foreground=child, fork/background=linked-root) follows OTel spec, and the SubagentOutcomeSink callback pattern is a clean solution for surfacing terminal state from error-swallowing bodies. ALS context propagation, TTL sweep safety, and first-write-wins recordOutcome all check out.

I left a handful of inline comments — one correctness issue with the bridge skip, plus some cleanup and test coverage items. Nothing blocking on its own, but worth addressing before merge.

Summary:

  • 🟠 1× P1: review-trail comment noise (~35 occurrences of wenshao @ #4410 / DeepSeek bot IDs in production code)
  • 🟡 5× P2: duration_ms naming inconsistency, bridge skip liveness gap, JSDoc truncation, two test coverage gaps
  • 🟢 4× P3: design-choice observations (skipped)

Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/telemetry/session-tracing.ts
Comment thread packages/core/src/tools/agent/agent.test.ts
Comment thread packages/core/src/tools/agent/agent.test.ts
… fixes

1. isInNativeSubagentSpan now checks ctx.ended — after TTL sweep ends
   the subagent span, the ALS frame persists but the span is dead.
   Without this check, the bridge skip fires incorrectly and late child
   events lose all trace representation.

2. Add bare duration_ms alongside qwen-code.subagent.duration_ms in
   endSubagentSpan for dashboard query consistency with other endXSpan.

3. Fix JSDoc line break that split closing parenthetical across lines.

Addresses yiliang114 review on #4410.
@doudouOUC

Copy link
Copy Markdown
Collaborator Author

已处理 yiliang114 review(commit fbc71900b

# 建议 处理 Commit
1 清理 41 处 wenshao @ 引用 Deferred — follow-up
2 isInNativeSubagentSpan 不检查 span liveness Fixed — 加 !ctx.ended 检查 fbc71900b
3 duration_ms 命名不一致 Fixed — 加裸 duration_ms fbc71900b
4 JSDoc 换行断裂 Fixed fbc71900b
5 fork/background invocationKind 测试 Deferred — follow-up
6 resultSummaryPresent: false 测试 Deferred — follow-up

验证:typecheck 通过,147 测试全绿。

const subagentContext = new AsyncLocalStorage<SpanContext | undefined>();

export function isInNativeSubagentSpan(): boolean {
return subagentContext.getStore() !== undefined;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] isInNativeSubagentSpan() only checks ALS presence (subagentContext.getStore() !== undefined), but the ALS frame outlives the span itself. After sweepStaleSpans fires (sets ctx.ended = true, removes from activeSpans, calls span.end()), the ALS frame still exists until the body promise resolves. Any subagent_execution LogRecord emitted in the window between sweep and body completion will hit isInNativeSubagentSpan() === true, causing LogToSpanProcessor to skip the bridge span — but the native span is already ended. Result: that event has no span representation in the trace tree at all.

The fix is to also check ctx.ended:

Suggested change
return subagentContext.getStore() !== undefined;
export function isInNativeSubagentSpan(): boolean {
const ctx = subagentContext.getStore();
return ctx !== undefined && !ctx.ended;
}

This way, post-sweep events fall through to bridge creation, preserving at least a log-derived span. The race window is narrow (4h TTL tail), but the fix is a one-liner with no downside.

— qwen3.7-max via Qwen Code /review

endAttributes['qwen-code.subagent.result_summary_present'] =
metadata.resultSummaryPresent;
}
if (metadata.error !== undefined) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] Two small issues here:

  1. Inconsistent guards for metadata.error: Line 1318 uses !== undefined (truthy for ""), while line 1333 uses a truthy check (falsy for ""). If metadata.error were ever "", the attribute gets exception.message: "" but the status message falls back to 'subagent failed' — inconsistent signals for dashboards.

  2. Double truncateSpanError call: The same value is truncated independently at line 1319 and line 1334.

Hoist the truncation to fix both:

Suggested change
if (metadata.error !== undefined) {
const truncatedError = metadata.error !== undefined
? truncateSpanError(metadata.error)
: undefined;
if (truncatedError !== undefined) {
endAttributes['exception.message'] = truncatedError;
}

Then use truncatedError in the status block:

message: truncatedError ?? 'subagent failed',

— qwen3.7-max via Qwen Code /review

const record = mockSpans.find((s) => s.name === 'qwen-code.subagent')!;

mockState.throwOnSetAttributes = true;
endSubagentSpan(span, { status: 'completed' });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] endSubagentSpan conditionally stamps terminateReason and resultSummaryPresent as span attributes (lines 1310-1317 in session-tracing.ts), but no test in this file ever passes these fields in metadata. The if (metadata.terminateReason !== undefined) and if (metadata.resultSummaryPresent !== undefined) branches are untested at the telemetry layer. (The agent.test.ts span-outcome tests verify the input metadata, but mock away endSubagentSpan itself.)

Consider adding to the completed test:

endSubagentSpan(span, {
  status: 'completed',
  terminateReason: 'goal',
  resultSummaryPresent: true,
});
// ...
expect(record.attributes['qwen-code.subagent.terminate_reason']).toBe('goal');
expect(record.attributes['qwen-code.subagent.result_summary_present']).toBe(true);

— qwen3.7-max via Qwen Code /review

expect(meta.error).toBe('subagent terminated with mode: ERROR');
expect(meta.errorType).toBe('ERROR');
});

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] TIMEOUT is listed as a non-throwing failure path in the comment (line 868: "ERROR/MAX_TURNS/TIMEOUT"), and deriveSubagentOutcomeMetadata maps it via the same catch-all as ERROR/MAX_TURNS. However, only ERROR and MAX_TURNS have explicit test cases; TIMEOUT is missing.

Adding a TIMEOUT test is trivial and guards against a future refactor that accidentally adds a TIMEOUT-specific branch:

it('TIMEOUT terminateMode → status="failed" + terminateReason="timeout"', async () => {
  vi.mocked(mockAgent.getTerminateMode).mockReturnValue(
    AgentTerminateMode.TIMEOUT,
  );
  await runForegroundOnce();
  const meta = lastEndMeta();
  expect(meta.status).toBe('failed');
  expect(meta.terminateReason).toBe('timeout');
});

— qwen3.7-max via Qwen Code /review

@wenshao

wenshao commented Jun 5, 2026

Copy link
Copy Markdown
Collaborator

Local Verification Report

PR: #4410feat(telemetry): Phase 3 — qwen-code.subagent span with concurrent isolation (#3731)
Branch: feat/telemetry-phase-3-subagent-spansmain
Changed files: 15 (+2469 / -111)
Environment: macOS Darwin 25.4.0, Node.js

CI Status

Check Status
Test (ubuntu-latest) ✅ Pass
Test (macos-latest) ✅ Pass
Test (windows-latest) ⏳ Pending
Lint ✅ Pass
CodeQL ✅ Pass

Local TSC Compilation

Package PR Branch Errors Base (main) Errors PR-Introduced
packages/core 3 3 0
packages/cli 43 14 0

Notes:

  • Core: all 3 errors are @opentelemetry/instrumentation-undici (identical on main)
  • CLI: +29 errors from stale branch base — none from PR-touched files. The 2 gemini.tsx errors are setPendingStartupWorktreeNotice (unrelated to this PR's telemetry changes)

Local Test Results

Test Suite Result Notes
session-tracing.test.ts ✅ 96 tests passed All subagent span tests pass (child parenting, TTL, linked-root, idempotency)
log-to-span-processor.test.ts ✅ 51 tests passed Bridge-skip logic for native subagent spans verified
agent-context.test.ts ⚠️ Load failure Pre-existing @opentelemetry/instrumentation-undici — same on main
agent.test.ts ⚠️ Load failure Pre-existing @opentelemetry/instrumentation-undici — same on main

Total: 147 tests passed across the 2 suites that loaded successfully. Load failures verified as pre-existing on main.

Code Review Summary

Architecture (Phase 3 subagent spans):

  1. session-tracing.ts — New subagentContext AsyncLocalStorage + startSubagentSpan / endSubagentSpan / runInSubagentSpanContext lifecycle. Key design decisions:

    • Foreground subagents = child spans (inherit traceId), fork/background = linked-root spans (new traceId + OTel Link to invoker)
    • subagentContext checked BEFORE interactionContext in startLLMRequestSpan / startToolSpan / startHookSpan so child spans nest under subagent, not outer interaction
    • runInSubagentSpanContext clears toolContext to prevent outer AGENT tool's toolContext from leaking into subagent hooks
    • TTL: 30min for foreground, 4h for fork/background (LONG_TTL_SUBAGENT_KINDS)
    • TTL sweep stamps qwen-code.subagent.status='aborted' + terminate_reason='ttl_swept'
  2. agent-context.ts — Added auto-incrementing depth field to AgentContext ALS. getCurrentAgentDepth() reads it for telemetry; callers never pass depth explicitly.

  3. agent.ts — New runWithSubagentSpan() method wrapping all 3 invocation paths (foreground/fork/background). First-write-wins recordOutcome callback pattern with defensive failed default if body forgets to call it. buildSubagentSpanSpec de-duplicates spec construction across call sites.

  4. log-to-span-processor.tsBRIDGE_SKIP_EVENT_NAMES + isInNativeSubagentSpan() guard: skips bridge span for EVENT_SUBAGENT_EXECUTION when native span is active (avoids double-counting), but still bridges when not in native span (e.g. runForkedAgent).

  5. constants.ts — New SPAN_SUBAGENT = 'qwen-code.subagent'.

  6. telemetry/index.ts — Exports all new subagent span types and functions.

  7. CLI changes (minor): gemini.tsx, InputPrompt.tsx, BackgroundTasksDialog.tsx, BackgroundTaskViewContext.tsx — small wiring adjustments for background task view context.

  8. Design docdocs/design/telemetry-subagent-spans-design.md — comprehensive design document covering trace-tree topology, edge cases, attribute schema, and migration path.

Code quality:

  • Dual-emit pattern: OTel GenAI spec attrs (gen_ai.agent.id, gen_ai.agent.name) alongside vendor qwen-code.subagent.* keys for dashboard compat
  • Thorough error resilience: span.end() always runs in finally blocks, even if setAttributes/setStatus throw
  • truncateSpanError applied to all error strings before span write
  • Test coverage: 96 session-tracing tests including regression tests for child span parenting (feat(telemetry): Phase 3 — qwen-code.subagent span with concurrent isolation (#3731) #4410 DeepSeek review), TTL sweep, linked-root creation, nested subagent shadowing, bg SubagentStart parenting asymmetry, and context exit behavior

Verdict

Ready to merge — Well-designed Phase 3 telemetry extension. 147 tests pass locally, CI passing (Windows pending). TSC errors and test load failures all pre-existing on base. Design doc covers edge cases and deferred work items clearly.

const subagentContext = new AsyncLocalStorage<SpanContext | undefined>();

export function isInNativeSubagentSpan(): boolean {
const ctx = subagentContext.getStore();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] The new !ctx.ended guard in isInNativeSubagentSpan() has no direct test coverage. session-tracing.test.ts has zero references to this function, and log-to-span-processor.test.ts fully mocks it as a boolean — neither exercises the liveness check on the real implementation.

Consider adding a test that starts a subagent span, ends it within the ALS frame, and asserts isInNativeSubagentSpan() returns false:

it('isInNativeSubagentSpan returns false after endSubagentSpan within the ALS frame', async () => {
  const span = startSubagentSpan({ ...baseOpts, invocationKind: 'foreground' });
  await runInSubagentSpanContext(span, async () => {
    expect(isInNativeSubagentSpan()).toBe(true);
    endSubagentSpan(span, { status: 'completed' });
    expect(isInNativeSubagentSpan()).toBe(false);
  });
});

— qwen3.7-max via Qwen Code /review

try {
const duration = Date.now() - spanCtx.startTime;
const endAttributes: Attributes = {
duration_ms: duration,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] The newly added bare duration_ms attribute is not asserted by any test. The existing duration test (line ~1470) only checks qwen-code.subagent.duration_ms. A one-line assertion would close the gap:

expect(record.attributes['duration_ms'] as number).toBeGreaterThanOrEqual(0);

— qwen3.7-max via Qwen Code /review

@yiliang114 yiliang114 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — all critical findings across 10+ review rounds resolved. Bridge skip regression fixed with ALS-based liveness check. CI green on all platforms. Remaining P2 items (fork/background test coverage, wenshao-ref cleanup) are fine as follow-up. Solid OTel integration work. Ship it.

@doudouOUC doudouOUC merged commit 509ad4a into main Jun 5, 2026
29 checks passed
@doudouOUC doudouOUC deleted the feat/telemetry-phase-3-subagent-spans branch June 5, 2026 09:12
tanzhenxin added a commit that referenced this pull request Jun 8, 2026
… onto main

Port the shell notification feature (#4355) from the old
BackgroundShellRegistry class into the shell-task.ts free-function
module. Update all call sites (Session.ts, useGeminiStream.ts,
chatCompressionService.ts) and their tests to use the new
module-level setters and unified TaskRegistry API.

Also integrates AgentTerminateMode.SHUTDOWN grouping with CANCELLED
(#4410) and fork-subagent feature gate (#4574) into the free-function
architecture.
tanzhenxin added a commit that referenced this pull request Jun 8, 2026
… onto main

Port the shell notification feature (#4355) from the old
BackgroundShellRegistry class into the shell-task.ts free-function
module. Update all call sites (Session.ts, useGeminiStream.ts,
chatCompressionService.ts) and their tests to use the new
module-level setters and unified TaskRegistry API.

Also integrates AgentTerminateMode.SHUTDOWN grouping with CANCELLED
(#4410) and fork-subagent feature gate (#4574) into the free-function
architecture.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants